人工智能 啟發式算法(A,A*)


啟發式算法區別於盲目搜索算法,是搜索策略的一種。主要特點是 可以利用問題自身的一些特征信息(啟發式信息)來指導搜索的過程,從而可以縮小搜索范圍,提高搜索效率。

實際上,啟發式算法也代表了"大拇指准則"(在大多數情況下是成功的,但不能保證一定成功的准則)。

啟發式算法離不開啟發式信息,而啟發式信息反映在評估函數中。

評估函數f(x)定義為:從初始節點S0出發,約束地經過節點X到達目標節點Sg的所有路徑中最小路徑代價的估計值。

其一般形式為f(x)=g(x)+h(x),g(x)表示從初始節點S0到節點X的實際代價;h(x)表示從X到目標節點Sg的最優路徑的估計代價。但是實際的形式要根據問題特性確定。

A搜索算法

我們通過一個八數碼的例子來解釋A搜索算法。

(問題描述及插圖轉載自http://www.cnblogs.com/guanghe/p/5485816.html

問題描述:

 3×3九宮棋盤,放置數碼為1 -8的8個棋牌,剩下一個空格,只能通過棋牌向空格的移動來改變棋盤的布局。

要求:根據給定初始布局(即初始狀態)和目標布局(即目標狀態),如何移動棋牌才能從初始布局到達目標布局,找到合法的走步序列。

問題討論:

A搜索算法如何解決八數碼問題呢?還記得啟發式算法離不開估價函數(f(x)=g(x)+h(x)),那么對於八數碼問題我們賦予估價函數實際意義,g(x)是當前被考察和擴展的節點n在搜索圖中的節點深度,h(x)是節點X與目標狀態Sg相比較,不在目標位的棋牌個數(不包含空格)。

那么初始狀態的f(x)=0+4=4。

在解決的過程中,我們還要借助OPEN表,CLOSE表。

OPEN表中存放還未擴展的節點,CLOSE表中存放已擴展的節點。

解題流程:

1,將初始節點裝入OPEN表

2,如果OPEN表為空,則失敗,退出;否則,取出OPEN表中第一個節點,加入到CLOSE表中。

3,如果節點是目標節點,則成功,退出。

4,如果節點可擴展,將節點的擴展節點加入到OPEN表中,將OPEN表按照估價函數由小到大排列;

否則跳轉第2步。

A*搜索算法

我們同樣用八數碼問題來解釋A* 算法。

A*算法中估價函數的定義:g(x)是當前被考察和擴展的節點n在搜索圖中的節點深度,h(x)是節點X與目標狀態Sg相比較,每個錯位棋牌在假設不受阻攔的情況下,移動到目標狀態相應位置所需移動次數的總和(不包含空格)。

A*算法比A算法更有效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM