人工智能搜索策略(上)

人工智能搜素策略算法

  狀態空間盲目搜索  函數

 廣度優先搜素(Breadth-First-Search)   性能

  深度優先搜素(Depth-First-Search)  人工智能

狀態空間啓發搜索 spa

  A搜索算法(A search algorithm).net

  A星搜索算法(A Star search algorithm)排序


狀態空間盲目搜索

首先是思想基礎,在此我羅列了BFS和DFS的科學定義,另還有個人通俗解釋文檔

   廣度優先搜索: 從初始節點S0開始逐層向下擴展,在第n層節點尚未所有搜索完以前,不進入第n+1層節點的搜索。Open表中的節點老是按進入的前後排序,先進入的節點排在前面,後進入的節點排在後面。get

   深度優先搜索: 從初始節點S0開始,在其子節點中選擇一個最新生成的節點進行考察,若是該子節點不是目標節點且能夠擴展,則擴展該子節點,而後再在此子節點的子節點中選擇一個最新生成的節點進行考察,依此向下搜索,直到某個子節點既不是目標節點,又不能繼續擴展時,才選擇其兄弟節點進行考察。it

若是你對上述的定義感到討厭(固然這是很差的),不妨看看下面個人通俗解釋:


廣度優先搜索:假如採用BFS進行搜索查找N,那麼就是先搜索第一層,若是第一層沒有就搜索第二層,而後再搜索第三層

深度優先搜索:假如採用DFS進行搜索查找N,那麼先選擇一個子數,好比左子樹,而後在選擇左子樹的子節點,直到目標沒有找到或者沒有子節點再返回,也就是說深度優先搜索是一路走,不到天黑不回頭


理解到字面意識毫不意味着結束,下面是一個九宮問題(八數碼問題),相信他會讓你進一步理解



咱們的目的是用最少的步驟移動空格,把S0變成SG,而空格只能選擇左右上下移動

1)採用廣度優先搜索


上圖就是採用廣度優先搜素策略的解法,不要帶有恐懼的第一感受去看這個圖,仔細看看它真的很是簡單,第一次先列出空格向上下左右走的狀況,假如咱們討論圖一1到圖二2,1的空格向左走獲得了2,而後2因爲左邊沒有了因此只有三種選擇,再看看這三種選擇,若是向右走顯然就回到了圖一,所以通過過濾與篩選圖二隻有兩種走法,而後再繼續直到找到目標節點 (圖26)


2)採用深度優先搜索


很遺憾的是沒有畫出完整的解法圖,由於實在太長了,這就是深度優先搜索,一路走,不到天黑不回頭。


狀態空間啓發性搜索

假如形象來所BFS和DFS,BFS像一個膽小的孩紙,遇到困難會嘗試每一種解決方法,DFS,像一個膽大的孩紙,遇到困難會選擇一種解決方法進行實踐,直到解決或者實踐失敗

 

BFS和DFS不適用於人工智能,由於他沒有體現出一種智能,只是盲目的尋找目標,試想一下,若是九宮格變成了一百宮格,而解法是在通常樹的最後一層,那BFS和DFS的性能沒法直視,因而就產生了適用於人工智能的啓發性搜索-A*搜索(這裏我不會講解A*搜索算法,而是A搜索算法)

 


在講它以前有必要了解一下啓發性概念和估價函數

     啓發性信息的概念:

     啓發性信息是指那種與具體問題求解過程有關的,並可指導搜索過程朝着最有但願方向前進的控制信息。    

估價函數:

     用來估計節點重要性的函數。估價函數f(n)被定義爲從初始節點S0出發,約束通過節點n到達目標節點Sg的全部路徑中最小路徑代價的估計值。它的通常形式爲:

             f(n)=g(n)+h(n)

其中,g(n)是從初始節點S0到節點n的實際代價;h(n)是從節點n到目標節點Sg的最優路徑的估計代價。 

若是時間充足建議你多度一下上方綠色部分,並記住上面的形式,它將會頗有用

仍是接着上面的九宮問題,若是咱們考慮用A*搜解決就能夠設估價函數以下:

f(n)=d(n)+W(n)

d(n)表示節點n在通常搜索樹中的深度

W(n)表示節點與Sg不匹配的個數,W(n)的值越大就代表這個方法離成功越遠


上圖就是利用A搜索 (注意不是A星)的解法圖,每一個格子左上方的值表示估價函數f(n)的值,將選擇f(n)最小的路走,直到成功,就如上圖,第一層(假設root不算層),每一個走法的估價值分別是4,4,5,5,因此咱們根本不考慮5的狀況,大大減少了運行時間,從而快速找到目標點。


因爲其它關係我準備把A*算法放在(下)中講解,但願你能認真體會A算法,另我把本文製做成了一個doc文檔以供離線瀏覽http://download.csdn.net/detail/u013524455/6893047

相關文章
相關標籤/搜索