1. 程式人生 > 實用技巧 >傳教士與野人問題(完整狀態搜尋圖)

傳教士與野人問題(完整狀態搜尋圖)

傳教士與野人問題

傳教士和野人問題。三個傳教士和三個野人在河的一岸, 有一條能載一個人或者兩個
人的船。請設法使所有人都渡到河的另一岸, 要求在任何地方野人數都不能多於傳教
士的人數。這個問題在AI 領域中很有名, 是因為它是第一個從分析的觀點探討問題。

對問題作如下抽象,以列表state=[c,a,b]分別代表初始岸邊的傳教士人數,野人人數,船隻數目,有

  • 初始狀態:state=[3,3,1]

  • agent所有可能行動:

    • b==1時,在以下五種狀態中選擇一種執行,

      • a=a-1,c=c-1,b=0
      • a=a-2,b=0
      • c=c-2,b=0
      • a=a-1,b=0
      • c=c-1,b=0

      但是需保證執行動作state處於狀態空間之中,否則不能執行。

    • b==0時,,在以下五種狀態中選擇一種執行

      • a=a+1,c=c+1,b=1
      • a=a+2,b=1
      • c=c+2,b=1
      • a=a+1,b=1
      • c=c+1,b=1

      但是需保證執行動作state處於狀態空間之中,否則不能執行。

    • 狀態空間:
      [3,3,1],[3,2,1],[3,1,1],[3,0,1],[2,2,1],[1,1,1],[0,3,1],[0,2,1],[0,1,1]
      [0,0,0],[3,2,0],[3,1,0],[3,0,0],[2,2,0],[1,1,0],[0,3,0],[0,2,0],[0,1,0]

搜尋樹

在這裡插入圖片描述

程式碼實現

參考此部落格