国科大高级人工智能笔记1-搜索
生活随笔
收集整理的這篇文章主要介紹了
国科大高级人工智能笔记1-搜索
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.搜索問題
- 搜索問題——對原問題的建模
- 構成:
- 狀態空間
- 包含環境中每一個細節
- 搜索狀態:只保留行動需要的細節
- 后繼函數
- 行動,消耗
- 初始狀態和目標測試
- 狀態空間
- 解:
- 一個行動序列,將初始狀態–>目標狀態
- 表示
- 狀態空間圖
- 搜索問題的數學表示
- 每種狀態只出現一次
- 不在內存中構建(大),但很有用
- 搜索樹
- 根節點:初始狀態
- 子節點:父節點的后繼狀態
- 節點:狀態,對應到達這個狀態的行動
- 對大多問題,不會構建整棵樹
- 樹中節點對應于圖中節點的某條完整路徑
- 大量重復結構:在樹中–>無窮大
- 狀態空間圖
- 搜索
- 擴展出潛在行動
- 維護所考慮行動的* * 邊緣* * (還未處理的節點,葉子)
- 試圖擴展盡可能少的樹節點
- 主要:
- 邊緣
- 擴展
- 探索策略–對應于各個搜索算法
- 構成:
2.全局搜索—保留了所有的路徑
- 參數說明
- b-分支因子
- m-最大深度
- d-最淺層的目標節點的深度
- l-限制下的深度,
- $C^* /\epsilon :UCS取得最優解時估計深度,:UCS取得最優解時估計深度,:UCS取得最優解時估計深度,\epsilon是最小cost,是最小cost,是最小cost,C^* $是解的cost,
- 整棵樹的深度:
- 1+b1+...+bm=O(bm)1+b^1+...+b^m=O(b^m)1+b1+...+bm=O(bm)
| DFS(深度優先) | 深度優先(從左往右,得到最左結果, | O(bm)O(b^m)O(bm) | O(bm)O(bm)O(bm) | (不完備)有限就有解 | 無 | 堆棧 |
| Depth-limited(深度優先) | 深度優先,限制最長搜索深度,超過就換一條 | O(bl)O(b^l)O(bl) | O(bl)O(bl)O(bl) | (不完備)m有限就有解 | 無 | 堆棧 |
| Iterative-Depth(深度優先) | 逐層限制深度,使用DFS(DFS的空間+BFS的最優) | O(bd)O(b^d)O(bd) | O(bd)O(bd)O(bd) | 有解,s必然有限 | 無 | 堆棧 |
| BFS | 寬度優先,會得到最淺層的解 | O(bd)O(b^d)O(bd) | O(bd)O(b^d)O(bd) | 有解,s必然有限(完備) | 最優(無權時才最優 | 隊列 |
| UCS(代價一致搜索 | 優先隊列BFS,考慮當前代價(優先級),BFS是UCS的特例,g(x) | O(b[C?/?])O(b^[C^* /\epsilon])O(b[C?/?]) | O(b[C?/?])O(b^[C^* /\epsilon])O(b[C?/?]) | 完備 | 最優 | 優先隊列 |
| 啟發式搜索 | 使用額外信息(如到終點的長度)–啟發函數h(x) | - | - | - | - | - |
| 貪婪搜索 | h(x)最好的先擴展 | 快速,最壞同DFS(全樹擴展) | - | 有限圖時完備 | 最大問題在于往往找不到最優解 | 優先隊列 |
| A* | UCS+貪婪,優先級用f(x)=g(x)+h(x),目標出列時才停止 | 指數 | 指數 | 有限圖時完備 | 實際h>估計h,且目標出列時結束的情況,最優(往好了估計) | 花費的話小的優先隊列 |
| A* 圖搜索 | 去除樹中重復節點(一個狀態則不擴展)(保證h(A)<=實際,且h(A)-h?<=弧cost(一致性) | 指數 | 指數 | 完備(樹有的狀態他都有) | 弧一致時最優 | 優先隊列 |
BFS/DFS
https://blog.csdn.net/qq_40763929/article/details/81675163
- 什么情況下DFS比BFS好?
- 解決連通性問題,用DFS
- 解決最短路徑問題,用BFS
- 迭代深入搜索存在浪費冗余嗎?
- 通常絕大多數的節點在底層,所以上層的節點生成多次影響不大
2.2 啟發式搜索
- 結束條件
- 目標出列時才結束
- 如果目標入列時結束?得不到最優解
- g(x)前向代價,已經花費的
- h(x)后向代價,預計還要花費的 —啟發函數
- f(x)
- A* 最優?
- 需要實際消耗>估計消耗–往好了估計
- 若實際消耗<估計消耗:得不到最優解(啟發函數設計的不合理)
- 保證往好了估計—可采納啟發
- 可采納啟發:0<=h(x)<=h* (x)(實際
- 獲得:
- 原問題的松弛問題的解(簡化原問題)
- 原,空格移動問題
- eg:棋子可以從A–>B
- eg:相鄰,則可移動(不論隔壁有無東西)
- 實際耗散(難算)
- 好壞:
- 占優勢:ha>=hc if 任意n,ha(n)>=hc(n)
- a擴展的節點包含于c
- 若無包含性,則取最大:
- h(n)=max(ha(n),hb(n))
- 占優勢:ha>=hc if 任意n,ha(n)>=hc(n)
- 原問題的松弛問題的解(簡化原問題)
- 特點
- 越接近原問題,需要擴展的節點越少
- 越接近原問題,計算越多
- 證明最優(使用了可采納啟發)
- B-次優,A-最優,h-可采納的,證明A在B前離開邊緣集合(出隊列)
- 假設B和A的祖先n在邊緣集合上
- 那么,n會在B之前被擴展
- f(n)<=f(A)(因為還未到達終點,f(A)=g(A)就是實際全程耗散)
- f(A)<f(B)(g(A)<g(B),且h(A)=h(B)=0到達終點了)
- 所以,n先擴展
- 所以A的所有祖先都在B之前擴展
- A在B之前擴展
- 所以,A* 最優
- B-次優,A-最優,h-可采納的,證明A在B前離開邊緣集合(出隊列)
- 前提:一致性–就是可采納性
- h(A)<=實際,
- 且h(A)-h?<=弧cost(一致性)
- 采用一致的h(啟發函數,所以
- f單調遞增
- 對每個狀態s,到達s最優的節點,優于次優
- 所以是最優的
- 假定到達G* (最優值)的路徑上某個n不能進入隊列,因為某個具有相同狀態且較差的n’先被擴展了
- 找到樹中最高的這個節點n
- p是n的祖先,且n’出列時在隊列里
- f§<f(n)(遞增
- f(n)<f(n’)次優
- p應該在n’之前被擴展
- 矛盾
- 得證先到達G*
| 貪婪 | 快速地向目標方向擴展, | 不一定能夠得到最優解 |
| UCS | 所有方向等可能擴展 | 能夠得到最優解 |
| A* | 朝著最優解方向擴展 | 能夠得到最優解 |
3.局部搜索—與路徑無關
-
全局搜索
- 保留了所有的路徑
-
局部搜索
- 與路徑無關
- 只與最終狀態有關
- 優點
- 內存要求小
- 快
- 缺點
- 不完備
- 不最優
- 用于純最優問題
- 操作:改進單一選項,直至不能改變
- 新的后繼函數:局部改變
-
ΔE=E(next)?E(now):ΔE>0,接受\Delta E=E(next)-E(now):\Delta E>0,接受ΔE=E(next)?E(now):ΔE>0,接受:
| 爬山法(如SGD) | 1.任意位置起始,2.移動到最好的相鄰位置,3.無最好則結束 | - | - | (不完備) | 無 |
| 模擬退火(從爬山法改進) | 1.任意位置起始,2.移動到最好的相鄰位置,3.不好的狀態則以eΔE/Te^{\Delta E/T}eΔE/T概率接受 | - | - | (不完備) | 下降夠慢,則最優 |
| 遺傳算法 | 1.選最好的N個(基于適應度函數),2.這幾個配對,并雜交,3.隨機變異各串中的一個,重復 | - | - | (不完備) | ? |
- M-左岸傳教士數目
- C-左岸野人數目
- B-左岸是否有船
- Pcm-有c個傳教士,m個野人從左岸到右岸
- Qcm-有c個傳教士,m個野人從右岸到左岸
- 問題有解所必須的特性
- M>=C且(3-M)>=(3-C)<==>M=C
- 或者M=0,M=3
- 安全狀態(以左岸為例):
- 傳教士與野人的數目相等;
- 傳教士都在左岸;
- 傳教士都不在左岸。
- 完全狀態圖:不滿足約束的不在圖內)
*
https://blog.csdn.net/guangheultimate/article/details/51377302
總結
以上是生活随笔為你收集整理的国科大高级人工智能笔记1-搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图书管理系统~简单流程
- 下一篇: 一个牛人给JAVA初学者的建议。虽然岁月