机器学习之基于A*搜索解决八数码问题15数码问题
針對hdu1043,來說一下A* 搜索。這道題不一定用A* 算法,還可以用雙向bfs。但是A*搜索更快,在人工智能方面應用也很廣泛。
A* 搜索不是像深度優先搜索算法和廣度優先搜索算法一樣的傻瓜式的埋頭搜索,它是先對當前的情況進行分析,得到最有可能的一個分支,然后在該分支上進行擴展,然后將擴展的結果放在之前的大環境中進行比較,再選取最有可能的分支進行擴展,直到找到最終狀態。A* 算法的核心是估價函數的選取(通俗的說就是對當前情況的評價方式的選取,通過什么方式選取的分支才是最有可能離最終狀態最近的分支)。A* 搜索得到的路徑不一定是最優的路徑,但是它得到這條路徑的時間一定是最小的。換句話說,A* 搜索不論是在擴展節點還是在生成節點方面都要優于深度優先搜索和廣度優先搜索。
八數碼問題
八數碼游戲包括一個3 * 3的棋盤,棋盤上擺放著8個數字的棋子,留下一個空位。與空位相鄰的棋子可以滑動到空位中。游戲的目的是要達到一個特定的目標狀態。假定目標狀態如下
對于廣度優先搜索來說,我們要從初始狀態轉移到目標狀態,所做的就是要判斷空格移動方向以及空格的位置。廣搜得到的路徑一定是最短的。但是這樣盲目的擴展和生成節點,如果數據量大了,就有可能MLE或者TLE。究其原因,我們用廣搜的時候,沒有什么限制,什么狀態都可以生成節點。
與之相比,A*搜索則會設置一個估價函數,針對估價函數的值,去判斷哪種狀態可以優先生成。
估價函數是搜索特性的一種數學表示&#
總結
以上是生活随笔為你收集整理的机器学习之基于A*搜索解决八数码问题15数码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线段树位运算的三种操作(|,^,)
- 下一篇: [SCOI2015]情报传递(主席树+l