




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗傳教士野人過河問題37030602 王世婷一、實驗問題傳教士和食人者問題(The Missionaries and Cannibals Problem )。在河的左岸有 3 個傳教士、1條船和3個食人者,傳教士們想用這條船將所有的成員運過河去,但是受 到以下條件的限制:(1)傳教士和食人者都會劃船,但船一次最多只能裝運兩個;(2)在任何岸邊食人者數(shù)目都不得超過傳教士,否則傳教士就會遭遇危險:被食人者攻擊甚至被吃掉。止匕外,假定食人者會服從任何一種過河安排,試規(guī)劃出一個確保全部成員安 全過河的計劃。二、解答步驟(1)設置狀態(tài)變量并確定值域B為船數(shù),要求 M>=ca M+C <=
2、3, L表示左岸,目標狀態(tài)M為傳教士人數(shù),C為野人人數(shù), R表水右岸。初始狀態(tài)R000(2)確定狀態(tài)組,分別列出初始狀態(tài)集和目標狀態(tài)集用三元組來表示 Sf: (ML, CL , BL )(均為左岸狀態(tài))其中 0 WML W3,0 WCL W3,BL C 0 , 1S0: (3,3 , 1)Sg : (0,0,0)初始狀態(tài)表示全部成員在河的的左岸;目標狀態(tài)表示全部成員從河的左岸全部渡河完畢。(3)定義并確定規(guī)則集合仍然以河的左岸為基點來考慮,把船從左岸劃向右岸定義為Pij操作。其中,第下標i表示船載的傳教士數(shù),第二下標 j表示船載的食人者數(shù);同理,從右岸將船劃回 左岸稱之為Qij操作,下標的定義
3、同前。則共有 10種操作,操作集為F=P01,P10, P11,P02,P20, Q01,Q10,Q11,Q02,Q20P0if ( ML ,CL , BL=1)then (ML- 1, CL,BL-1 )Riif ( ML ,CL , BL=1 ) then ( ML , CL- 1 , BL - 1 )Riif ( ML ,CL , BL=1)then (ML- 1, CL- 1, BL- 1 )F2oif ( ML ,CL , BL=1)then (ML- 2, CL,BL-1 )P)2if ( ML ,CL , BL=1 )then (ML , CL-2 , BL - 1)Q。if (
4、 ML ,CL , BL=0 )then (ML+1 , CL , BL+1 )Q1if ( ML ,CL , BL=0 )then (ML , CL+1 , BL +1 )Q1if ( ML ,CL , BL=0 )then (ML+1 , CL +1, BL +1)Q0 if ( ML ,CL , BL=0 ) then ( ML+2 , CL +2, BL +1 )Q02 if ( ML ,CL , BL=0 ) then ( ML , CL +2, BL +1 )(4)當狀態(tài)數(shù)量不是很大時,畫出合理的狀態(tài)空間圖(3.仇 0)11, 1)J f=2 Qii2, 1)I f=£t
5、o(o,Z Q)1 f=3 Qdl圖1狀態(tài)空間圖箭頭旁邊所標的數(shù)字表示了 P或Q操作的下標,即分別表示船載的傳教士數(shù)和食人者數(shù)。三、算法設計方法一:樹的遍歷根據(jù)規(guī)則由根(初始狀態(tài))擴展出整顆樹,檢測每個結點的“可擴展標記”,為“ -1的即目標結點。由目標結點上溯出路徑。見源程序1。方法二:啟發(fā)式搜索構造啟發(fā)式函數(shù)為:工C6.01 -ML CL滿足規(guī)則時 f 二、 其它選擇較大值的結點先擴展。見源程序2。四、實驗結果 方法一的實驗結果:傳教士野人過河問題第1種方法:1人,野人過去1人 1人,野人過去0人 0人,野人過去2人 0人,野人過去1人 2人,野人過去0人 1人,野人過去1人 2人,野人過
6、去0人 0人,野人過去1人 0人,野人過去2人第10次:右岸到左岸,傳教士過去0人,野人過去1人第11次:左岸到右岸,傳教士過去0人,野人過去2人第2種方法:第1次:左岸到右岸,傳教士過去 第2次:右岸到左岸,傳教士過去 第3次:左岸到右岸,傳教士過去 第4次:右岸到左岸,傳教士過去 第5次:左岸到右岸,傳教士過去 第6次:右岸到左岸,傳教士過去 第7次:左岸到右岸,傳教士過去 第8次:右岸到左岸,傳教士過去 第9次:左岸到右岸,傳教士過去1人,野人過去1人 1人,野人過去0人 0人,野人過去2人 0人,野人過去1人 2人,野人過去0人 1人,野人過去1人 2人,野人過去0人 0人,野人過去1
7、人 0人,野人過去2人第10次:右岸到左岸,傳教士過去第11次:左岸到右岸,傳教士過去1人,野人過去0人1人,野人過去1人第3種方法:第1次:左岸到右岸,傳教士過去 第2次:右岸到左岸,傳教士過去 第3次:左岸到右岸,傳教士過去 第4次:右岸到左岸,傳教士過去 第5次:左岸到右岸,傳教士過去 第6次:右岸到左岸,傳教士過去0人,野人過去2人0人,野人過去1人0人,野人過去2人0人,野人過去1人2人,野人過去0人1人,野人過去1人第1次:左岸到右岸,傳教士過去 第2次:右岸到左岸,傳教士過去 第3次:左岸到右岸,傳教士過去 第4次:右岸到左岸,傳教士過去 第5次:左岸到右岸,傳教士過去 第6次:
8、右岸到左岸,傳教士過去 第7次:左岸到右岸,傳教士過去 第8次:右岸到左岸,傳教士過去 第9次:左岸到右岸,傳教士過去第7次:左岸到右岸,傳教士過去 第8次:右岸到左岸,傳教士過去 第9次:左岸到右岸,傳教士過去 第10次:右岸到左岸,傳教士過去 第11次:左岸到右岸,傳教士過去 第4種方法: 第1次:左岸到右岸,傳教士過去 第2次:右岸到左岸,傳教士過去 第3次:左岸到右岸,傳教士過去 第4次:右岸到左岸,傳教士過去 第5次:左岸到右岸,傳教士過去 第6次:右岸到左岸,傳教士過去 第7次:左岸到右岸,傳教士過去 第8次:右岸到左岸,傳教士過去 第9次:左岸到右岸,傳教士過去 第10次:右岸到
9、左岸,傳教士過去第11次:左岸到右岸,傳教士過去 方法二的實驗結果:傳教士野人過河問題方法如下2人,野人過去0人0人,野人過去1人0人,野人過去2人0人,野人過去1人0人,野人過去2人0人,野人過去2人0人,野人過去1人0人,野人過去2人0人,野人過去1人2人,野人過去0人1人,野人過去1人2人,野人過去0人0人,野人過去1人0人,野人過去2人1人,野人過去0人1人,野人過去1人1人,野人過去1人,野人過去0人,野人過去0人,野人過去2人,野人過去1人,野人過去2人,野人過去0人,野人過去0人,野人過去0人,野人過去0人,野人過去1 人 l:2r,2y r:1r,1y0 人 l:3r,2y r
10、:0r,1y2 人 l:3r,0y r:0r,3y1 人 l:3r,1y r:0r,2y0 人 l:1r,1y r:2r,2y1 人 l:2r,2y r:1r,1y0 人 l:0r,2y r:3r,1y1 人 l:0r,3y r:3r,0y2 人 l:0r,1y r:3r,2y1 人 l:0r,2y r:3r,1y2 人 l:0r,0y r:3r,3y第1次:左岸到右岸,傳教士過去 第2次:右岸到左岸,傳教士過去 第3次:左岸到右岸,傳教士過去 第4次:右岸到左岸,傳教士過去 第5次:左岸到右岸,傳教士過去 第6次:右岸到左岸,傳教士過去 第7次:左岸到右岸,傳教士過去 第8次:右岸到左岸,傳
11、教士過去 第9次:左岸到右岸,傳教士過去 第10次:右岸到左岸,傳教士過去 第11次:左岸到右岸,傳教士過去 問題結束 由結果可以看出,方法二的結果為方法一的第一種結果,兩者具有一致性。五、總結與教訓:最開始時采用的方法為:用向量A=X0,X1,X2, X3,X4,X5,X6表示狀態(tài),其X。X2表示三個傳教士的位置, X3X5表示三個野人的位置,X6表示船的位置表示在河左岸,1表示已渡過了河,在河右岸。設初始狀態(tài)和目標狀態(tài)分別為:S:So =0,0,0,0,0,0,0G:Sg =1,1,111,1,1但在描述規(guī)則時發(fā)現(xiàn)這樣定義會造成規(guī)則麻煩、不清晰,原因在于此題并不關心是哪幾個傳教士和野人在船
12、上,僅關心其人數(shù),故沒有必要將每個人都設置變量,分別將傳教 士、野人、船作為一類即可。四、源代碼1.源程序1:樹的遍歷%野人和傳教士過河問題%date:2010/12/14%author:wang shi tingfunction =guohe()clear all;close all;global n node;n=2;solveNum=1; %問題的解法result=zeros(100,1);node=zeros(300,5);node(1,:)=3,3,1,1,-1;% 初始化%1左岸傳教士數(shù)2左岸野人數(shù)3船(1為左岸,0為右岸)%4是否可擴展(1為可擴展)5父節(jié)點號(-1表示無父節(jié)點,
13、即為初始節(jié)點)j=1;% for j=1:nwhile (1)if j>nbreakendif node(j,4)=1 %判斷結點是否可擴展if node(j,3)=1 %船在左岸if ( (node(j,1)=0) | (node(j,1)=3) )&&(node(j,2)>=1) forward(j,0,1);endif (node(j,1)=1 && node(j,2)=1 | node(j,1)=3 && node(j,2)=2) forward(j,1,0);endif (node(j,1)>=1 &&
14、 node(j,1)=node(j,2)forward(j,1,1);endif (node(j,1)=0 | node(j,1)=3)&& node(j,2)>=2 forward(j,0,2);endif (node(j,1)=2 && node(j,2)=2 | node(j,1)=3 && node(j,2)=1) forward(j,2,0);endelseif node(j,3)=0% 船在右岸if ( (node(j,1)=0) | (node(j,1)=3) )&&(node(j,2)<=2) afte
15、rward(j,0,1);endif (node(j,1)=2 && node(j,2)=2 | node(j,1)=0 && node(j,2)=1) afterward(j,1,0);endif (node(j,1)<=2 && node(j,1)=node(j,2) afterward(j,1,1);endif (node(j,1)=0 | node(j,1)=3)&& node(j,2)<=1 afterward(j,0,2);endif (node(j,1)=1 && node(j,2)=1
16、| node(j,1)=0 && node(j,2)=2) afterward(j,2,0);endendendj=j+1;endfprintf('傳教士野人過河問題n');for t=1:nj=1;k=t;StepNum=1;if node(k,4)=-1while (k=-1) result(j)=k; k=node(k,5);j=j+1;endj=j-1;fprintf('第曲中方法:n',solveNum);while j>1BoatPriNum=node(result(j),1)-node(result(j-1),1);BoatW
17、ildNum=node(result(j),2)-node(result(j-1),2);if node(result(j),3)=1fprintf('第次:左岸到右岸,傳教士過去 d人,野人過去人n',StepNum,abs(BoatPriNum),abs(BoatWildNum);StepNum=StepNum+1; endif node(result(j),3)=0fprintf('第次:右岸到左岸,傳教士過去d人,野人過去人n',StepNum,abs(BoatPriNum),abs(BoatWildNum);StepNum=StepNum+1;endj
18、=j-1; end pause(0.2); fprintf('n'); solveNum=solveNum+1;endendfprintf(' 問題結束);%從左岸到右岸,船上傳教士 x個,野人y個function =forward(z,x,y)global n;global node;node(n,1)=node(z,1)-x;node(n,2)=node(z,2)-y;node(n,3)=0;r=search(z);if(r)return endnode(z,4)=0;node(n,4)=1;node(n,5)=z;s=destination();if snode(
19、n,4)=-1;endn=n+1;%呱右岸到左岸,船上傳教士 x個,野人y個function =afterward(z,x,y)global n;global node;node(n,1)=node(z,1)+x;node(n,2)=node(z,2)+y;node(n,3)=1;r=search(z);if(r)returnendnode(z,4)=0;node(n,4)=1;node(n,5)=z;s=destination();if snode(n,4)=-1;endn=n+1;%function r=search(x)global n node;i=x;while node(i,5)=
20、-1if node(i,1)=node(n,1) && node(i,2)=node(n,2) && node(i,3)=node(n,3) r=0;returnendi=node(i,5);end%艮初始節(jié)點比較if node(i,1)=node(n,1) && node(i,2)=node(n,2) && node(i,3)=node(n,3)r=0;returnendr=1;%均不相同 % function s=destination()global n node;if node(n,1)=0 && node
21、(n,2)=0 && node(n,3)=0 s=1;returnends=0;2.運用啟發(fā)式函數(shù)%野人和傳教士過河問題%date:2010/12/15%author:wang shi tingfunction =guohe()clear all;close all;global n node open_list index;n=2;result=zeros(100,1);node=zeros(100,5);node(1,:)=3,3,1,1,-1;% 初始化%1左岸傳教士數(shù)2左岸野人數(shù)3船(1為左岸,0為右岸)%4是否可擴展(1為可擴展)5父節(jié)點號(-1表示無父節(jié)點,即為初始
22、節(jié)點)index=1;open_list=1,0.01;% 節(jié)點號啟發(fā)函數(shù)值while (1)row,尸size(open_list);if row=0fprintf('all the nodes in open list have been expanded.'); returnendfor i1=1:rowopen_list(i1,2)=6.01-node(open_list(i1,1),1)-node(open_list(i1,1),2);%定義啟發(fā)函數(shù)if node(open_list(i1,1),4)=-1%如果該結點是目標結點,則打印結果fprintf('傳
23、教士野人過河問題n');j=1;k=open_list(i1,1);StepNum=1;while (k=-1)result(j)=k;k=node(k,5);j=j+1;endj=j-1;fprintf('方法如下 n');while j>1BoatPriNum=node(result(j),1)-node(result(j-1),1);BoatWildNum=node(result(j),2)-node(result(j-1),2);if node(result(j),3)=1fprintf('第次:左岸到右岸,傳教士過去d人,野人過去人n',
24、StepNum,abs(BoatPriNum),abs(BoatWildNum);StepNum=StepNum+1;endif node(result(j),3)=0fprintf('第次:右岸到左岸,傳教士過去d人,野人過去人n',StepNum,abs(BoatPriNum),abs(BoatWildNum);StepNum=StepNum+1;endj=j-1;endpause(0.2);fprintf('問題結束 n');returnendendr_row,,尸find(open_list(:,2)=max(open_list(:,2);j=open_
25、list(r_row(1,1),1);if node(j,3)=1 %船在左岸if ( (node(j,1)=0) | (node(j,1)=3) )&&(node(j,2)>=1)forward(j,0,1);endif (node(j,1)=1 && node(j,2)=1 | node(j,1)=3 && node(j,2)=2)forward(j,1,0);endif (node(j,1)>=1 && node(j,1)=node(j,2)forward(j,1,1);endif (node(j,1)=0 |
26、node(j,1)=3)&& node(j,2)>=2forward(j,0,2);endif (node(j,1)=2 && node(j,2)=2 | node(j,1)=3 && node(j,2)=1) forward(j,2,0);endelseif node(j,3)=0% 船在右岸if ( (node(j,1)=0) | (node(j,1)=3) )&&(node(j,2)<=2)afterward(j,0,1);endif (node(j,1)=2 && node(j,2)=2 | n
27、ode(j,1)=0 && node(j,2)=1) afterward(j,1,0);endif (node(j,1)<=2 && node(j,1)=node(j,2)afterward(j,1,1);endif (node(j,1)=0 | node(j,1)=3)&& node(j,2)<=1afterward(j,0,2);endif (node(j,1)=1 && node(j,2)=1 | node(j,1)=0 && node(j,2)=2) afterward(j,2,0);endend%display(open_list);open_list(r_row(1),:)=;index=index-1;%open 表個數(shù)減 1%display(open_list);end%從左岸到右岸,船上傳教士 x個,野人y個function =forward(z,x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國再生書寫紙數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國PVC手機套行業(yè)投資前景及策略咨詢報告
- 2025━2030年波紋型真空吸盤行業(yè)深度研究報告
- 2025━2030年中國穿孔吸音鋁箔項目投資可行性研究報告
- 幼兒園獲獎公開課:大班語言《有個性的羊》微課件
- 腦梗塞溶栓患者的護理
- 軀體形式障礙護理個案查房
- 靜脈血栓栓塞癥的預防
- 股靜脈血透管護理
- 腹腔鏡全胃切除術護理查房
- 大學生勞動教育教程全套PPT完整教學課件
- GB/T 985.1-2008氣焊、焊條電弧焊、氣體保護焊和高能束焊的推薦坡口
- GB/T 912-2008碳素結構鋼和低合金結構鋼熱軋薄鋼板和鋼帶
- GB/T 15970.7-2000金屬和合金的腐蝕應力腐蝕試驗第7部分:慢應變速率試驗
- 中共一大會址
- 制度經(jīng)濟學:05團隊生產理論
- 作文格子紙(1000字)
- 刻度尺讀數(shù)練習(自制)課件
- 四年級下冊美術課件 4紙卷魔術|蘇少版
- 七年級數(shù)學蘇科版下冊 101 二元一次方程 課件
- ZL50裝載機工作裝置設計
評論
0/150
提交評論