猴子摘香蕉

2021-09-24 13:55:51 字數 2713 閱讀 8857

房內有乙個猴子,乙個箱子,天花板掛了一串香蕉,其位置如圖所示。猴子為了拿到香蕉,它必須把箱子搬到香蕉下面,然後再爬到箱子上。請定義必要的謂詞,列出問題的初始化狀態(即下圖所示狀態),目標狀態(猴子拿到了香蕉,站在箱子上,箱子位於位置b)

1、定義描述環境狀態的謂詞

at(x,y)         x在y處       x=  y=

hold(s) 猴子拿著s s=

on(z) z在箱子上 z=

2、使用謂詞、連線詞、量詞來表示環境狀態

初始狀態s:

at(monkey,a)∧at(banana,b)∧at(box,c)∧hold(empty)∧on(empty)

目標狀態t:

at(monkey,b)∧at(banana.b)∧at(box,b)∧hold(banana)∧on(monkey)

3、從初始狀態到目標狀態的轉化,猴子需要完成一系列的操作,定義操作謂詞表示其動作

go(m,n)    猴子從m處移動到n處        m,n=

move(m,n) 猴子把箱子從m處移到n處 m,n=

clime(m) 猴子在m處爬上箱子 m=

pick(m) 猴子在m處摘到香蕉 m=

這四個操作也可以用條件和動作來表示。條件直接用謂詞公式表示,是為完成相應操作所必須具備的條件:當條件中的事實均成立時,則可執行該操作。動作通過前後狀態的變化表示,即通過刪除或增加謂詞公式來描述動作前後的狀態。

go(m,n)    猴子從m處移動到n處        m,n=

條件:at(monkey,m)

動作_刪除:at(monkey,m)

動作_增加:at(monkey,n)

move(m,n) 猴子把箱子從m處移到n處 m,n=

條件:at(monkey,m)∧at(box,m)

動作_刪除:at(monkey,m)∧at(box,m)

動作_增加:at(monkey,n)∧at(box,n)

clime(m) 猴子在m處爬上箱子 m=

條件:at(monkey,m)∧at(box,m)∧at(banana,m)∧on(empty)

動作_刪除:on(empty)

動作_增加:on(monkey)

pick(m) 猴子在m處摘到香蕉 m=

條件:at(monkey,m)∧at(box,m)∧at(banana,m)∧on(monkey)∧hold(empty)

動作_刪除:hold(empty)

動作_增加:hold(banana)

4、按照行動計畫,一步步使用操作進行狀態變化,直至達到目標狀態

at(monkey,a)∧at(banana,b)∧at(box,c)∧hold(empty)∧on(empty)

go(a,c)

at(monkey,c)∧at(banana,b)∧at(box,c)∧hold(empty)∧on(empty)

move(c,b)

at(monkey,b)∧at(banana,b)∧at(box,b)∧hold(empty)∧on(empty)

clime(b)

at(monkey,b)∧at(banana,b)∧at(box,b)∧hold(empty)∧on(monkey)

pick(b)

at(monkey,b)∧at(banana.b)∧at(box,b)∧hold(banana)∧on(monkey)

5、最終行動操作序列為:

人工智慧演算法 猴子摘香蕉

只有簡單的狀態顯示 include iostream using namespace std void at char monkeyplace,char boxplace void state int on,int hb char goto char st,char lt void act char...

邏輯題 飛機加油 硬幣平分 猴子摘香蕉

1.每個飛機只有乙個油箱,飛機之間可以相互加油 注意是相互,沒有加油機 一箱油可供一架飛機繞地球飛半圈。為使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?所有飛機從同一機場起飛,而且必須安全返回機場,不允許中途降落,中間沒有飛機場 步驟如下 1 3 架飛機同時從機場出發,飛行八分之...

猴子與香蕉

題目描述 一組研究人員正在設計乙個測試猴子iq的實驗。他們把香蕉吊在屋頂上,同時給猴子提供了磚塊。如果猴子夠聰明,它會把磚塊乙個個疊起來做成乙個塔,然後爬上去拿到自己喜愛的食物。研究人員有n種不同的磚塊,而且每種磚塊都是取之不盡的。每種磚塊都是長方體,第i種磚塊的大小是 xi,yi,zi 磚塊能夠翻...