用python语言实现人工智能猴子摘香蕉的问题_人工智能 猴子香蕉问题
1
1.
问题描述
在一个房间内有一只猴子(可把这只猴子看做一个机器人)
、一个箱子和一束香蕉。
香蕉挂在天花板下方,但猴子的高度不足以碰到它。那么这只猴子怎样才能摘到香蕉呢?
图
1
表示出猴子、香蕉和箱子在房间内的相对位置。用四元表列(
W,x,Y
,z
)来表示这个问
题的状态。
其中,
W
-猴子的水平位置
x
-当猴子在箱子顶上时取
x=1
;否则取
x=0
Y
-箱子的水平位置
z
-当猴子摘到香蕉时取
z=1
;否则取
z=0
这个问题中的操作(算符)如下:
1
、
goto(U)
猴子走到水平位置
U
,表示为
Goto (U)
(W
,
0
,
Y
,
z) -------------->(U
,
0
,
Y
,
z)
即把状态
(W
,
0
,
Y
,
z)
变换为状态
(U
,
0
,
Y
,
z)
。
2
、
pushbox(V)
猴子把箱子推到水平位置
V
,即有
Pushbox (V)
(W
,
0
,
W
,
z)---------------->(V
,
0
,
V
,
z )
条件:猴子与箱子必须在同一位置上,并且,猴子不是在箱子顶上。
应当注意的是,要应用算符
pushbox
(
V
)
,就要求
产生式规则的左边,猴子与箱子必
须在同一位置上,并且,
猴子不是在箱子顶上。这种强加于操作的适用性条件,叫做产生式
规则的先决条件
3
、
climbbox
猴子爬上箱顶,即有
Climbbox
(W
,
0
,
W
,
z)------------------>(W
,
1
,
W
,
z)
条件:猴子和箱子应当在同一位置上,而且猴子不在箱顶上。
4
、
grasp
猴子摘到香蕉,即有
Grasp
(c
,
1
,
c
,
0) ------------------->(c
,
1
,
c
,
1)
条件:猴子和箱子都在位置
c
上,并且猴子已在箱子顶上。
求解过程
令初始状态为
(a,0,b,0)
。这时,
goto(U)
是唯一适用的操作,并导致下一状
态
(U
,
0
,
b,0)
。现在有
3
个适用的操作,即
goto(U)
,
pushbox(V)
和
climbbox(
若
U=b)
。
其
中
,
c
是
香
蕉
正
下
方
的
地
板
位
置
,
该
初
始
状
态
变
换
为
目
标
状
态
的
操
作
序
列
为
:
{
goto(b),pushbox(c),climbbox,grasp
}
应当说明的是,在这种情况下,算符(操作)的适用性及作用均由产生式规则表示。例
如,对于规则(
2
)
,只有当算符
pushbox(V)
的先决条件,即猴子与箱子在同一位置上而且
猴子不在箱顶上这些条件得到满足时,算符
pushbox(V)
才是适用的。这一操作算符的
作用
是猴子把箱子推到位置v。
在这一表示中,
目标状态的集合可由任何最后元素为
1
的表列来
描述。
2.
源代码