猴子摘香蕉實(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)說明:本文檔由用戶提供并上傳,收益歸屬內(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日 1、 實(shí)驗(yàn)內(nèi)容利用一階謂詞邏輯求解猴子摘香蕉問題:房?jī)?nèi)有一個(gè)猴子,一個(gè)箱子,天花板上掛了一串香蕉,其位置如圖所示,猴子為了拿到香蕉,它必須把箱子搬到香蕉下面,然后再爬到箱子上。請(qǐng)定義必要的謂詞,列出問題的初始化狀態(tài)(即下圖所示狀態(tài)),目標(biāo)狀態(tài)(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。(附加:從初始狀態(tài)到目標(biāo)狀態(tài)的謂詞演算過程。)2、 實(shí)驗(yàn)平臺(tái)VC6.03、 實(shí)驗(yàn)分析1. 定義描述環(huán)境狀態(tài)的謂詞。AT(x,w):x在t處,

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

3、monkey,box)HOLD(monkey,banana)ON(box,b)CLEAR(ceiling)CLEAR(c)BOX(box)BANANA(banana)3. 從初始狀態(tài)到目標(biāo)狀態(tài)的轉(zhuǎn)化, 猴子需要完成一系列操作, 定義操作類謂詞表示其動(dòng)作。WALK(m,n):猴子從m走到n處,個(gè)體域:m,na,b,c;CARRY(s,r):猴子在r處拿到s,個(gè)體域:rc,ceiling,sbox,banana;CLIMB(u,b):猴子在b處爬上u;這3個(gè)操作也可分別用條件和動(dòng)作來表示。條件直接用謂詞公式表示,是為完成相應(yīng)操作所必須具備的條件;當(dāng)條件中的事實(shí)使其均為真時(shí),則可激活操作規(guī)則,于是可

4、執(zhí)行該規(guī)則中的動(dòng)作部分。動(dòng)作通過前后狀態(tài)的變化表示,即通過從動(dòng)作前刪除或增加謂詞公式來描述動(dòng)作后的狀態(tài)。WALK(m,n):猴子從m走到n處條件:AT(monkey,m)動(dòng)作:CARRY(s,r):猴子在r處拿到s條件:AT(monkey,r)EMPTY(monkey)ON(s,r)BOX(box)BANANA(banana)動(dòng)作:CLIMB(u,b):猴子在b處爬上u條件:AT(monkey,b)HOLD(monkey,u)CLEAR(b)BOX(box)BANANA(banana)動(dòng)作:4. 按照行動(dòng)計(jì)劃, 一步步進(jìn)行狀態(tài)替換, 直至目標(biāo)狀態(tài)。AT(monkey,a)EMPTY(monke

5、y)ON(box,c)ON(banana,ceiling)CLEAR(b)BOX(box)BANANA(banana)AT(monkey,c)EMPTY(monkey)ON(box,c)ON(banana,ceiling)CLEAR(b)BOX(box)BANANA(banana)AT(monkey,c)HOLD(monkey,box)ON(banana,ceiling)CLEAR(b)CLEAR(c)BOX(box)BANANA(banana)AT(monkey,b)HOLD(monkey,box)ON(banana,ceiling)CLEAR(b)CLEAR(c)BOX(box)BANAN

6、A(banana)AT(monkey,box)EMPTY(monkey)ON(box,b)ON(banana,ceiling)CLEAR(c)BOX(box)BANANA(banana)AT(monkey,box)HOLD(monkey,banana)ON(box,b)CLEAR(ceiling)CLEAR(c)BOX(box)BANANA(banana)(目標(biāo)得解)猴子行動(dòng)的規(guī)則序列是:WALK(a,c)CARRY(c,box)WALK(c,b)CLIMB(box,b)CARRY(banana,ceiling)在上述過程中,我們應(yīng)該注意,當(dāng)猴子執(zhí)行某一個(gè)操作之前,需要檢查當(dāng)前狀態(tài)是否可使所要

7、求的條件得到滿足,即證明當(dāng)前狀態(tài)是否蘊(yùn)涵操作所要求的狀態(tài)的過程。在行動(dòng)過程中, 檢查條件的滿足性后才進(jìn)行變量的代換。代入新條件后的新狀態(tài)如果是目標(biāo)狀態(tài),則問題解決;否則看是否滿足下面的操作,如果不滿足或即使?jié)M足卻又回到了原來的狀態(tài),那么代入無效。4、 源代碼#include <stdio.h>struct Stateint 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,

8、Banana=0*/ int monbox; /*-1: monkey on the box;1: monkey the box;*/;struct State States 150;char* routesave150;/*function monkeygoto,it makes the monkey goto the other place*/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;el

9、se 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 printf("parameter is wrong");/*end function monkeyygoto*/*function movebox,the monkey move the box to the other pla

10、ce*/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 = "monkey move box to B"Statesi+1=Statesi;Statesi+1.monkey=0;Statesi+1.box=0;else if(B=1)routesavei = "monkey move b

11、ox to C"Statesi+1=Statesi;Statesi+1.monkey=1;Statesi+1.box=1;elseprintf("parameter is wrong");/*end function movebox*/*function climbonto,the monkey climb onto the box*/void climbonto(int i)routesavei="Monkey climb onto the box"Statesi+1=Statesi;Statesi+1.monbox=1;/*function

12、 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;/*function reach,if the monkey,box,and banana are at the same place,the monkey reach banana*/void reach(int i) routesavei="Monkey reach the

13、 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+) printf ("Step %d : %s n",c+1,routesavec); printf("n");/*perform next step*/void nextStep(int i)int c; int j; if(i&g

14、t;=150) printf("%s n", "steplength reached 150,have problem "); return; for (c=0; c<i; c+) /*if the current state is same to previous,retrospect*/ if(Statesc.monkey=Statesi.monkey&&Statesc.box=Statesi.box&&Statesc.banana=Statesi.banana&&Statesc.monbox=S

15、tatesi.monbox) return; if(Statesi.monbox=1&&Statesi.monkey=0&&Statesi.banana=0&&Statesi.box=0) showSolution(i);printf("Press any key to 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)i

16、f(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);nextStep(j);*/elsereach(i+1);nextStep(j);/*climbdown(i);nextStep(j);*/ else if(Statesi.box=1)/*monkeygoto(-1,i);nextStep(j);*/monkeygoto(1,i);next

17、Step(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);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);next

18、Step(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);nextStep(j);elseclimbdown(i);nextStep(j);movebox(0,i);nextStep(j);climbonto(i);reach(i+1);nextStep(j); else if(Statesi.box=-1) monkeygoto(-1,i);nextStep(j);movebox(0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論