第 1 章 搜索問題

傳教士和野人問題
有3個傳教士和3個野人來到河邊準備渡河,河岸有一條船,每次至多可供2人乘渡。問傳教士為了安全起見,應如何規劃擺渡方案,使得任何時刻,在河的兩岸以及船上的野人數目總是不超過傳教士的數目(但允許在河的某一岸只有野人而沒有傳教士)?

搜索策略選取規則的方式
  • 無信息引導的搜索策略:不考慮給定問題所具有的特定知識,系統根據事先確定好的某種固定排序,依次調用規則或隨機調用規則,屬于盲目搜索的方式。
  • 有信息引導的搜索策略:考慮問題領域可應用的知識,動態地確定規則的排序,優先調用較合適的規則使用,稱為啟發式搜索策略。

回溯策略

將規則給出一個固定的排序,在搜索時,對當前狀態依次檢測每一條規則,在當前狀態未使用過的規則中找到第一條可應用規則,應用于當前狀態,得到的新狀態重新設置為當前狀態,并重復以上搜索。如果當前狀態無規則可用,或者所有規則已經被試探過仍未找到問題的解,則將當前狀態的前一個狀態設置為當前狀態。重復以上搜索,直到找到問題的解,或者試探了所有可能后仍找不到問題的解為止。

用遞歸法實現回溯策略
  • 如果找到目標,結束;
  • 如果狀態不合法,則回溯;
  • 計算可應用規則集,依某種原則(任意排序或啟發式準則)排序后賦給某個變量;
  • 規則用完未找到目標,回溯;
  • 取第一條可應用規則;
  • 刪去第一條規則,減少可應用規則表的長度;
  • 調用規則作用于當前狀態,生成新狀態;
  • 對新狀態遞歸調用本過程;
  • 遞歸調用失敗,則轉移調用另一規則進行測試;
  • 過程返回解路徑規則表;
改進后的遞歸算法

防止環路和節點過深

  • 設置當前狀態;
  • 檢測當前狀態是否存在狀態表中,若存在,表示有環路,回溯;
  • 找到目標,返回
  • 狀態不合法,返回
  • 計算狀態表的長度,即搜索的深度,若大于給定的值,回溯;
  • 計算可應用規則集,依某種原則排序后賦給某個變量;
  • 循環規則集,如果規則用完未找到目標,回溯;
  • 取第一條可應用規則;
  • 刪除第一條規則,減少可應用規則表的長度;
  • 將規則應用于當前狀態,生成新狀態;
  • 將新狀態加入狀態表
  • 遞歸調用本過程;
  • 遞歸調用失敗,則轉移調用另一規則進行測試;
  • 過程返回解路徑規則表;

圖搜索策略

將所有搜索過的狀態都記錄下來的搜索方法稱為“圖搜索算法”。

  • 結點深度:根結點的深度為0,其他結點的深度規定為父結點深度加1,即 dn+1 = dn + 1;
  • 路徑:設一結點序列為(n0,n1,···,ni,···,nk),對 i = 1,2,···,k,若任一結點ni-1都具有一個后繼結點ni,則該結點序列稱為從結點n0到結點nk長度為k的一條路徑;
  • 路徑耗散值:令C(ni,nj)為結點ni到nj這段路徑(或弧線)的耗散值,一條路徑的耗散值等于連接這條路徑各結點間所有弧線耗散值的總和;
  • 擴展一個結點:后繼結點操作符(相當于可應用規則)作用到結點(對應于某一狀態描述)上,生成出其所有后繼節點(新狀態),并出連接弧線的耗散值(相當于使用規則的代價),這個過程叫做擴展一個結點。
圖搜索算法
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容