一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等)。设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下(设猴子位置为A,香蕉位置在B,箱子位置为C),如何行动可摘取到香蕉?
性能 | 环境 | 执行器 | 感受器 |
---|---|---|---|
猴子站在箱子上摘得香蕉 | 香蕉、箱子位置 | (四肢)Move,Climb,Push,Grasp | (眼睛) Site,Hold,On,Hang |
\(x\) 的个体域是\(\{Monkey, Box\}\)
\(y\)的个体域是\(\{a,b,c\}\) (地点为 a,b,c)
\(z\)的个体域是\(\{Monkey\}\)
\(w\)的个体域是\(\{Banana\}\)
猴子在A处,香蕉悬挂在B处,箱子放在C处。
猴子拿到香蕉,站在箱子上,箱子位于B处。
综合数据库:(M, B, Box, On, H)
初始状态:(a, b, c, 0, 0)
结束状态:(b, b, b, 1, 1)
规则集:
具体过程:
根据具体问题可将规则具体为:
在已知事实下,\(r_1 \rightarrow r_2 \rightarrow r_3 \rightarrow r_5\),即可得到香蕉。
# 猴子走向箱子 def Goto(Monkey, Box): global i # 步数 i += 1 print("step " + str(i) + ": " + "Monkey从" + Monkey + "走向" + Box) # 猴子推箱子到香蕉处 def Pushbox(Box, Banana): global i i += 1 print("step " + str(i) + ": " + "Monkey将Box从" + Box + "推向" + Banana) # 猴子爬上箱子 def Climbbox(): global i i += 1 print("step " + str(i) + ": " + "Monkey爬上Box") # 猴子摘取香蕉 def Grasp(): global i i += 1 print("step " + str(i) + ": " + "Monkey摘到Banana") # 猴子爬下箱子 def Dropbox(): global i i += 1 print("step " + str(i) + ": " + "Monkey爬下box") # 检查输入 def Check(Monkey, Banana, Box, On, H): if Monkey != Box and On == "1": print("不合法的输入!") return False if H == "1": print("Monkey已摘到banana") return False return True if __name__ == "__main__": i = 0 print("请输入Monkey位置,Banana的位置,Box的位置,猴子是否在箱子上(1:在,0:不在)上以及猴子是否摘取香蕉(1:是,0:否):") Monkey, Banana, Box, On, H = input().split(",") Flag = Check(Monkey, Banana, Box, On, H) while Flag: # r1规则:箱子和猴子不在一起才能走向箱子 if Monkey != Box: Goto(Monkey, Box) Monkey = Box continue # r2规则:猴子跟箱子在一起,且不跟香蕉在一起,以及猴子不在箱子上,才能推箱子到香蕉处 if Box != Banana and Monkey == Box and On == "0": Pushbox(Box, Banana) Monkey = Box = Banana continue # r3规则:猴子不在箱子上,并且猴子跟箱子在一起才能爬 if On == "0" and Monkey == Box: Climbbox() On = "1" continue # r5规则:猴子在箱子上,并且处在香蕉位置,且猴子没有摘取香蕉,才能摘取香蕉 if On == "1" and Box == Banana and H == "0": Grasp() H = "1" continue # r4规则:猴子在箱子上,但不在香蕉的位置,爬下箱子 if On == "1" and Box != Banana: Dropbox() On = "0" continue # 猴子取到香蕉,则结束循环 if H == "1": break