人工智慧野人渡河
㈠ 急求 人工智慧 野人傳教士過河問題,詳解!!!!
我來試著回答一下前三問:
(1)完整的規則集合
if(MR,CR,LR=1)then(MR-1,CR,LR-1);
if(MR,CR,LR=1)then(MR,CR-1,LR-1);
if(MR,CR,LR=1)then(MR-1,CR-1,LR-1);
if(MR,CR,LR=1)then(MR-2,CR,LR-1);
if(MR,CR,LR=1)then(MR,CR-2,LR-1);
if(MR,CR,LR=0)then(MR+1,CR,LR+1);
if(MR,CR,LR=0)then(MR,CR+1,LR+1);
if(MR,CR,LR=0)then(MR+1,CR+1,LR+1);
if(MR,CR,LR=0)then(MR+2,CR,LR+1);
if(MR,CR,LR=0)then(MR,CR+2,LR+1);
(2)狀態空間的總狀態數為4×4×2=32,只有20個合法狀態,其中有4個合法狀態達不到,最終解空間由16個狀態組成,下面給出說明
(MR,CR,LR)(MR,CR,LR)
(001)達不到(000)
(011)(010)
(021)(020)
(031)(030)達不到
(101)不合法(100)不合法
(111)(110)
(121)不合法(120)不合法
(131)不合法(130)不合法
(201)不合法(200)不合法
(211)不合法(210)不合法
(221)(220)
(231)不合法(230)不合法
(301)達不到(300)
(311)(310)
(321)(320)
(331)(330)達不到
(3)2個野人去,1個野人回
2個野人去,1個野人回
2個傳教士去,1個野人與1個傳教士回
2個傳教士去,1個野人回
2個野人去,1個野人回
2個野人去,完成
不合法的狀態和重復狀態,我都沒畫出,你可以自己加一下,也可以結合圖
說明一下
㈡ 人工智慧野人傳教士過河
第一次倆個野人過來河,留下一個源野人,回一個野人
第二次一野人一傳教士過河,留下一個傳教士,回一個野人
第三次倆個教士過河,回一個野人
剩下的就好辦了...
(錯)
*************************************************************************
汗。。。火星微生物說得對哈,我差點就鬧出人命了
試一試:(x:野人,o:傳教士)
第一次倆個野人過河,留下一個野人,回一個野人( xxooo|x )
第二次倆個野人過河,留下一個野人,回一個野人(xooo|xx)
第三次倆個傳教士過河,回一個野人,一傳教士(xxoo|xo)
第四次倆個傳教士過河(xx|xooo)........
大家看看,有沒有問題(這幾天腦袋發昏),歡迎指教:)
㈢ 過河問題
差不多,你參考下:
野人過河問題屬於人工智慧學科中的一個經典問題,問題描述如下: 有三個牧師(也有的翻譯為傳教士)和三個野人過河,只有一條能裝下兩個人的船,在河的任何一方或者船上,如果野人的人數大於牧師的人數,那麼牧師就會有危險. 你能不能找出一種安全的渡河方法呢?
一、演算法分析
先來看看問題的初始狀態和目標狀態,假設和分為甲岸和乙岸:
初始狀態:甲岸,3野人,3牧師;
乙岸,0野人,0牧師;
船停在甲岸,船上有0個人;
目標狀態:甲岸,0野人,0牧師;
乙岸,3野人,3牧師;
船停在乙岸,船上有0個人;
整個問題就抽象成了怎樣從初始狀態經中間的一系列狀態達到目標狀態。問題狀態的改變是通過劃船渡河來引發的,所以合理的渡河操作就成了通常所說的算符,根據題目要求,可以得出以下5個算符(按照渡船方向的不同,也可以理解為10個算符):
渡1野人、渡1牧師、渡1野人1牧師、渡2野人、渡2牧師
算符知道以後,剩下的核心問題就是搜索方法了,本文採用深度優先搜索,通過一個FindNext(…)函數找出下一步可以進行的渡河操作中的最優操作,如果沒有找到則返回其父節點,看看是否有其它兄弟節點可以擴展,然後用Process(…)函數遞規調用FindNext(…),一級一級的向後擴展。
搜索中採用的一些規則如下:
1、渡船優先規則:甲岸一次運走的人越多越好(即甲岸運多人優先),同時野人優先運走;
乙岸一次運走的人越少越好(即乙岸運少人優先),同時牧師優先運走;
2、不能重復上次渡船操作(通過鏈表中前一操作比較),避免進入死循環;
3、任何時候河兩邊的野人和牧師數均分別大於等於0且小於等於3;
4、由於只是找出最優解,所以當找到某一算符(當前最優先的)滿足操作條件後,不再搜索其兄弟節點,而是直接載入鏈表。
5、若擴展某節點a的時候,沒有找到合適的子節點,則從鏈表中返回節點a的父節點b,從上次已經選擇了的算符之後的算符中找最優先的算符繼續擴展b。
㈣ 用Visual Prolog實現一個人工智慧程序。問題如下。
看你是中法的告訴你吧,,,我是你璽哥
三個傳教士和三個野人的示常式序如下:
move(1,0).
move(0,1).
move(0,2).
move(2,0).
move(1,1).
legal((X,Y,_)):-legal1(X),legal1(Y).
legal1((X,Y)):-X=:=0,Y>=0,!.
legal1((X,Y)):-Y=:=0,X>=0,!.
legal1((X,Y)):-X>=Y,X>=0,Y>=0.
update((X,Y,0),Move,Statu1):-
(A,B)=X,
(C,D)=Y,
(E,F)=Move,
C1 is C+E,
D1 is D+F,
A1 is A-E,
B1 is B-F,
Statu1=((A1,B1),(C1,D1),1).
update((X,Y,1),Move,Statu1):-
(A,B)=X,
(C,D)=Y,
(E,F)=Move,
C1 is C-E,
D1 is D-F,
A1 is A+E,
B1 is B+F,
Statu1=((A1,B1),(C1,D1),0).
connect(Statu,Statu1):-
move(X,Y),
update(Statu,(X,Y),Statu1),
legal(Statu1).
findroad(X,X,L,L):-write(L).
findroad(X,Y,L,L1):-
connect(X,Z),
not(member(Z,L)),
findroad(Z,Y,[Z|L],L1).
㈤ 傳教士和野人渡河問題
第一步:先過去兩個食人獸,再回來一個;(或先過去一個傳教士和一個獸,傳教士回來)
第二步:再過去兩個食人獸,再回來一個; (再過去兩個獸,再回來一個獸,下面的一樣)
第三步:過去兩個傳教士,再回來一個傳教士和一個食人獸;
第四步:再過去兩個傳教士,回來一個食人獸;
第五步:過去兩個食人獸,再回來一個食人獸;
第六步:最後兩個食人獸過去。
希望能解決你的疑問O∩_∩O~
㈥ 如何解決野人過河問題
差不多,你參考下:
野人過河問題屬於人工智慧學科中的一個經典問題,問題描述如下: 有三個牧師(也有的翻譯為傳教士)和三個野人過河,只有一條能裝下兩個人的船,在河的任何一方或者船上,如果野人的人數大於牧師的人數,那麼牧師就會有危險. 你能不能找出一種安全的渡河方法呢?
一、演算法分析
先來看看問題的初始狀態和目標狀態,假設和分為甲岸和乙岸:
初始狀態:甲岸,3野人,3牧師;
乙岸,0野人,0牧師;
船停在甲岸,船上有0個人;
目標狀態:甲岸,0野人,0牧師;
乙岸,3野人,3牧師;
船停在乙岸,船上有0個人;
整個問題就抽象成了怎樣從初始狀態經中間的一系列狀態達到目標狀態。問題狀態的改變是通過劃船渡河來引發的,所以合理的渡河操作就成了通常所說的算符,根據題目要求,可以得出以下5個算符(按照渡船方向的不同,也可以理解為10個算符):
渡1野人、渡1牧師、渡1野人1牧師、渡2野人、渡2牧師
算符知道以後,剩下的核心問題就是搜索方法了,本文採用深度優先搜索,通過一個FindNext(…)函數找出下一步可以進行的渡河操作中的最優操作,如果沒有找到則返回其父節點,看看是否有其它兄弟節點可以擴展,然後用Process(…)函數遞規調用FindNext(…),一級一級的向後擴展。
搜索中採用的一些規則如下:
1、渡船優先規則:甲岸一次運走的人越多越好(即甲岸運多人優先),同時野人優先運走;
乙岸一次運走的人越少越好(即乙岸運少人優先),同時牧師優先運走;
2、不能重復上次渡船操作(通過鏈表中前一操作比較),避免進入死循環;
3、任何時候河兩邊的野人和牧師數均分別大於等於0且小於等於3;
4、由於只是找出最優解,所以當找到某一算符(當前最優先的)滿足操作條件後,不再搜索其兄弟節點,而是直接載入鏈表。
5、若擴展某節點a的時候,沒有找到合適的子節點,則從鏈表中返回節點a的父節點b,從上次已經選擇了的算符之後的算符中找最優先的算符繼續擴展b。
㈦ 一個簡單的人工智慧題:用問題歸約法求解野人與修道士的問題
問題歸約法從目標(要解決的問題)出發,逆向推理,通過一系列變換把初始問題變換為子問題集合和子子問題集合,直至最後歸約為一個平凡的本原問題集合。
已知條件1:最後一次乘船的一定是兩人。
已知條件2:往與返的組合不能重復,否則沒有意義。
已知條件3:左岸人數除最末次外,不為零。
目標0:
右岸有3個野人3個修道士,船在右。
逆向推理:
最後一次乘船到右岸的組合有以下幾種:
1個野人1個修道士;2個野人。
目標-1:
a、左岸1野1修,右岸2野2修,船在左;
b、左岸2野,右岸1野3修,船在左。
逆向推理:
a、左岸1野,1修駛向左岸,右岸2野2修;
b、左岸1野,1野駛向左岸,右岸1野3修。
目標-2:
左岸1野,右岸2野3修,船在右。
逆向推理:
c、左岸1野,1修駛向右岸,右岸2野2修;
d、左岸1野,1野駛向右岸,右岸1野3修;
e、左岸1野,2野駛向右岸,右岸3修。
目標-3:
左岸3野,右岸3修,船在左。
逆向推理:
f、左岸1野,2野駛向左岸,右岸3修;
g、左岸2野,1野駛向左岸,右岸3修。
目標-4:
左岸2野,右岸1野3修,船在右。
逆向推理:
h、左岸2野,1野駛向右岸,右岸3修;
i、左岸2野,2修駛向右岸,右岸1野1修。
目標-5:
左岸2野2修,右岸1野1修,船在左。
逆向推理:
j、左岸2野,2修駛向左岸,右岸1野1修;
k、左岸1野1修,1野1修駛向左岸,右岸1野1修。
目標-6:
左岸1野1修,右岸2野2修,船在右。(與目標-5對稱)
逆向推理:
l、左岸1野1修,2修駛向右岸,右岸2野。
目標-7:
左岸1野3修,右岸2野,船在左。(與目標-4對稱)
逆向推理:
m、左岸3修,1野駛向左岸,右岸2野。
目標-8:
左岸3修,右岸3野,船在右。(與目標-3對稱)
逆向推理:
n、左岸3修,2野駛向右岸,右岸1野。
目標-9:
左岸3修2野,右岸1野,船在左。(與目標-2對稱)
逆向推理:
左岸3修1野,1野駛向左岸,右岸1野。
目標-10:
左岸3修1野,右岸2野,船在右。
逆向推理:
左岸3修1野,2野駛向右岸,右岸無人。
達到期望的初始狀態^^
結論:
1、2野向右:結果左3修1野,右2野,船在右。(目標-10)
2、1野向左:結果左3修2野,右1野,船在左。(目標-9)
3、2野向右:結果左3修,右3野,船在右。(目標-8)
4、1野向左:結果左3修1野,右2野,船在左。(目標-7)
5、2修向右:結果左1修1野,有2修2野,船在右。(目標-6)
6、1修1野向左:結果左2修2野,右1修1野,船在左。(目標-5)
7、2修向右:結果左2野,右3修1野,船在右。(目標-4)
8、1野向左:結果左3野,右3修,船在左。(目標-3)
9、2野向右:結果左1野,右2野3修,船在右。(目標-2)
10、1野向左:結果左2野,右1野3修,船在左。
或1修向左:結果左1野1修,右2野2修,船在左。(目標-1)
11、2野向右,或1修1野向右,達到目的。
㈧ 野人過河新問題 演算法
樓主,我懷疑你問題打錯了,有幾個野人啊?如果只有一個,那怎麼渡都行,還版有, 如果把條件改為在河上權野人和僧人的數量相同,野人才不會吃掉僧人,是什麼意思啊,船上只能有兩個人,當然最多一僧一野,沒被吃的可能啊
㈨ 人工智慧 野人與傳教士c++程序,能運行
http://so.csdn.net/bbsSearchResult.aspx?q=%e9%87%8e%e4%ba%ba%e4%b8%8e%e4%bc%a0%e6%95%99%e5%a3%ab%e8%bf%87%e6%b2%b3&p=0
csdn的論壇,自己找,有答案。