猴子摘香蕉實(shí)驗(yàn)報(bào)告(含代碼)_第1頁(yè)
猴子摘香蕉實(shí)驗(yàn)報(bào)告(含代碼)_第2頁(yè)
猴子摘香蕉實(shí)驗(yàn)報(bào)告(含代碼)_第3頁(yè)
猴子摘香蕉實(shí)驗(yàn)報(bào)告(含代碼)_第4頁(yè)
猴子摘香蕉實(shí)驗(yàn)報(bào)告(含代碼)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、中科技大學(xué)人工智能與模式識(shí)別實(shí)驗(yàn)報(bào)告系:電子與信息工程系級(jí):名:人:指導(dǎo)老師:話:箱:期:2013年12月24日、實(shí)驗(yàn)內(nèi)容利用一階謂詞邏輯求解猴子摘香蕉問(wèn)題:房?jī)?nèi)有一個(gè)猴子,一個(gè)箱子,天花板上掛了一串香蕉,其位置如圖所示, 猴子為了拿到香蕉,它必須把箱子搬到香蕉下面,然后再爬到箱子上。請(qǐng)定義必要的謂詞,列出問(wèn)題的初始化狀態(tài)(即 下圖所示狀態(tài)),目標(biāo)狀態(tài)(猴子拿到了香蕉,站在箱子上,箱子位于位置b )。(附加:從初始狀態(tài)到目標(biāo)狀態(tài)的謂詞演算過(guò)程。)4abc二、實(shí)驗(yàn)平臺(tái)VC6.0三、實(shí)驗(yàn)分析1.定義描述環(huán)境狀態(tài)的謂詞。AT(x,w) : x 在 t 處,個(gè)體域:x?monkey ,w?a,b,c,

2、box;HOLD(x,t) : x 手中拿著 t,個(gè)體域:t?box,ba nan a;EMPTY(x) : x手中是空的;ON(t,y) : t 在 y 處,個(gè)體域:y?b,c,ceiling;CLEAR(y) : y上是空的;BOX(u) : u是箱子,個(gè)體域:u?box;BANANA(v) : v 是香蕉,個(gè)體域:v?banana;2. 使用謂詞、連結(jié)詞、量詞來(lái)表示環(huán)境狀態(tài)。問(wèn)題的初始狀態(tài)可表示為:So: AT(monkey,a)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)?BANANA(ba nana) 要達(dá)

3、到的目標(biāo)狀態(tài)為:Sg: AT(monkey,box)?HOLD(monkey,banana)?ON(box,b)?CLEAR(ceiling)?CLEAR(c)?BOX(box)?BANANA(ba nana)3. 從初始狀態(tài)到目標(biāo)狀態(tài)的轉(zhuǎn)化 ,猴子需要完成一系列操作,定義操作類謂詞表示其動(dòng)作。WALK(m,n) :猴子從 m 走到 n 處,個(gè)體域: m,n?a,b,c ;CARRY(s,r):猴子在 r 處拿到 s,個(gè)體域:r?c,ceili ng , s?box,ba nan a;CLIMB(u,b) :猴子在 b 處爬上 u;這3 個(gè)操作也可分別用條件和動(dòng)作來(lái)表示。條件直接用謂詞公式表示

4、,是為完成相應(yīng)操作所必須具備的條件;當(dāng) 條件中的事實(shí)使其均為真時(shí),則可激活操作規(guī)則,于是可執(zhí)行該規(guī)則中的動(dòng)作部分。動(dòng)作通過(guò)前后狀態(tài)的變化表示, 即通過(guò)從動(dòng)作前刪除或增加謂詞公式來(lái)描述動(dòng)作后的狀態(tài)。WALK(m,n) :猴子從 m 走到 n 處 條件: AT(monkey,m)刪除: AT(monkey,m)動(dòng)作:增加: AT(monkey,n)CARRY(s,r) :猴子在 r 處拿到 s 條件: AT(monkey,r)?EMPTY(monkey)?ON(s,r)?BOX(box)?BANANA(banana)動(dòng)作: 刪除: EMPTY(monkey) ON(s,r)增加: HOLD(mon

5、key,s) CLEAR(r )CLIMB(u,b) :猴子在 b 處爬上 u 條件: AT(monkey,b)?HOLD(monkey,u)?CLEAR(b)?BOX(box)?BANANA(banana)刪除: AT(monkey,b) HOLD(monkey,u) CLEAR(c) 動(dòng)作: 增加: AT(monkey,u)EMPTY(monkey) ON(u,c)4. 按照行動(dòng)計(jì)劃 , 一步步進(jìn)行狀態(tài)替換 , 直至目標(biāo)狀態(tài)。AT(monkey,a)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)?BANANA(ba

6、nana)WALK (a,c)用a代換m,用c代換nAT(monkey,c)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)?BANANA(banana)CARRY(c,box)用 c代換 s,用 box代換 rAT(monkey,c)?HOLD(monkey,box)?ON(banana,ceiling)?CLEAR(b)?CLEAR(c)?BOX(box)?BANANA(banana)WALK (c, b)用c代換m,用b代換nAT(monkey,b)?HOLD(monkey,box)?ON(banana,ceili

7、ng)?CLEAR(b)?CLEAR(c)?BOX(box)?BANANA(banana)CLIMB (box,b)用 box代換 uAT(monkey,box)?EMPTY(monkey)?ON(box,b)?ON(banana,ceiling)?CLEAR(c)?BOX(box)?BANANA(banana)CARRY (banana, ceiling )用 banana代換 s,用 ceiling 代換 rAT(monkey,box)?HOLD(monkey,banana)?ON(box,b)?CLEAR(ceiling)?CLEAR(c)?BOX(box)?BANANA(banana)

8、 (目標(biāo)得解)猴子行動(dòng)的規(guī)則序列是:WALK(a,c)7CARRY(c,box尸WALK(c,b)CLIMB(box,b)CARRY(banana,ceiling)在上述過(guò)程中,我們應(yīng)該注意,當(dāng)猴子執(zhí)行某一個(gè)操作之前,需要檢查當(dāng)前狀態(tài)是否可使所要求的條件得到滿足, 即證明當(dāng)前狀態(tài)是否蘊(yùn)涵操作所要求的狀態(tài)的過(guò)程。在行動(dòng)過(guò)程中, 檢查條件的滿足性后才進(jìn)行變量的代換。代入新 條件后的新?tīng)顟B(tài)如果是目標(biāo)狀態(tài),則問(wèn)題解決;否則看是否滿足下面的操作,如果不滿足或即使?jié)M足卻又回到了原來(lái) 的狀態(tài),那么代入無(wú)效。四、源代碼#include <stdio.h> struct Statethe box;*

9、/int monkey; /*-1:Monkey at A;0: Monkey at B;1:Monkey at C;*/ int box; /*-1:box at A;0:box at B;1:box at C;*/ int banana; /*Banana at B,Banana=0*/ int monbox; /*-1: monkey on the box;1: monkey ;struct State States 150;char* routesave150;/*function monkeygoto,it makes the monkey goto the other place*

10、/ void monkeygoto(int b,int i)int a;a=b;if (a=-1)routesavei="Monkey go to A"Statesi+1=Statesi;Statesi+1.monkey=-1;else if(a=0)routesavei="Monkey go to B"Statesi+1=Statesi;Statesi+1.monkey=0;else if(a=1)routesavei="Monkey go to C"Statesi+1=Statesi;Statesi+1.monkey=1;else

11、printf("parameter is wrong");/*end function monkeyygoto*/ /*function movebox,the monkey move the box to the other place*/ void movebox(int a,int i)int B;B=a;if(B=-1) routesavei="monkey move box to A" Statesi+1=Statesi;Statesi+1.monkey=-1; Statesi+1.box=-1;else if(B=0) routesavei

12、= "monkey move box to B" Statesi+1=Statesi;Statesi+1.monkey=0; Statesi+1.box=0;else if(B=1) routesavei = "monkey move box to C" Statesi+1=Statesi;Statesi+1.monkey=1;Statesi+1.box=1; elseprintf("parameter is wrong");/*end function movebox*/ /*function climbonto,the monke

13、y climb onto the box*/ void climbonto(int i)routesavei="Monkey climb onto the box"Statesi+1=Statesi;Statesi+1.monbox=1;/*function climbdown,monkey climb down from the box*/ void climbdown(int i)routesavei="Monkey climb down from the box"Statesi+1=Statesi;Statesi+1.monbox=-1;/*fun

14、ction reach,if the monkey,box,and banana are at the same place,the monkey reach banana*/ void reach(int i) routesavei="Monkey reach the banana"/*output the solution to the problem*/ void showSolution(int i)int c;printf ("%s n", "Result to problem:");for(c=0; c<i+1; c

15、+)printf ("Step %d : %s n",c+1,routesavec);printf("n");/*perform next step*/ void nextStep(int i) int c;int j; if(i>=150)printf("%s n", "steplength reached 150,have problem "); return;for (c=0; c<i; c+) /*if the current state is same to previous,retrospe

16、ct*/ if(Statesc.monkey=Statesi.monkey&&Statesc.box=Statesi.box&&Statesc.banana=Statesi.banana&& Statesc.monbox=Statesi.monbox)return; if(Statesi.monbox=1&&Statesi.monkey=0&&Statesi.banana=0&&Statesi.box=0)showSolution(i); printf("Press any key to

17、continue n");getchar();/*to save screen for user,press any key to continue*/ return;j=i+1;if(Statesi.monkey=0)if(Statesi.box=0)if(Statesi.monbox=-1)climbonto(i); reach(i+1); nextStep(j);/*monkeygoto(-1,i); nextStep(j); monkeygoto(0,i); nextStep(j); movebox(-1,i); nextStep(j); movebox(0,i); next

18、Step(j);*/reach(i+1);nextStep(j);/*climbdown(i); nextStep(j);*/else if(Statesi.box=1)/*monkeygoto(-1,i); nextStep(j);*/ monkeygoto(1,i); nextStep(j); movebox(0,i); nextStep(j); climbonto(i); reach(i+1); nextStep(j);else /*box=-1*/monkeygoto(-1,i); nextStep(j); movebox(0,i); nextStep(j); climbonto(i)

19、; reach(i+1); nextStep(j);/*end if*/if(Statesi.monkey=-1)if(Statesi.box=-1)if(Statesi.monbox=-1)movebox(0,i); nextStep(j); climbonto(i); reach(i+1); nextStep(j);elseclimbdown(i); nextStep(j);movebox(0,i); nextStep(j); climbonto(i);reach(i+1); nextStep(j);else if(Statesi.box=0)monkeygoto(0,i); nextStep(j); climbonto(i); reach(i+1); nextStep(j); elsemonkeygoto(1,i); nextStep(j); movebox(0,i); nextStep(j); climbonto(i); reach(i+1); nextStep(j);/*end if*/if(Statesi.monkey=1)if (Statesi.box=1)if(Statesi.monbox=-1)movebox(0,i); nextStep(j); climbonto(i); reach(i+1);

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論