实验1:猴子摘香蕉问题的VC编程实现 一、实验目的 利用一阶谓词逻辑求解猴子摘香蕉问题并通过编程来实现 二、编程环境 本文主要编译环境是Windows10VisualStudio2015在Ubuntu12.0用gcc编译来演示问题的另外几种状态的解法 三、问题描述 房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。请定义必要的谓词,列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置b)。 四、解决方案 1. 定义描述环境状态的谓词。 AT(x,y):x在y处,个体域:x?{monkey,box,banana},y?{a,b,c}; HAND(s):猴子手中拿着s,个体域:s?{box,banana}; ONBOX(monkey):猴子在箱子上; 2. 使用谓词、连结词、量词来表示环境状态。 问题的初始状态可表示为: So:AT(monkey,a)?~HAND(s)?AT(box,c)?~ONBOX(monkey)?AT(banana,b) 要达到的目标状态为: Sg:AT(box,b)?ONBOX(monkey)?HAND(banana)?AT(monkey,b)?AT(banana,b) 3. 从初始状态到目标状态的转化,猴子需要完成一系列操作,定义操作类谓词表示其动作。 go(m,n):猴子从m走到n处,个体域:m,n?{a,b,c}; movebox(m,n):猴子把箱子从m处移动到n处,个体域:m,n?{a,b,c}; onbox(m):猴子在m处爬上箱子,个体域:m?{a,b,c}; catch(banana):猴子摘到香蕉; 这3个操作也可分别用条件和动作来表示。条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。动作通过前后状态的变化表示,即通过从动作前删除或增加谓词公式来描述动作后的状态。 go(m,n):猴子从m走到n处 条件:AT(monkey,m) 删除:AT(monkey,m)动作: 增加:AT(monkey,n)movebox(m,n):猴子把箱子从m处移动到n处 条件:AT(monkey,m))?~HAND(s)?AT(box,m) 动作:删除:~HAND(s)AT(box,m) 增加:HAND(s)AT(box,n)AT(monkey,n) onbox(m):猴子在m处爬上箱子 条件:AT(monkey,m)?~HAND(s)?AT(box,m)?AT(banana,m)?~ONBOX(monkey) 动作:删除:~ONBOX(monkey)增加:ONBOX(monkey) catch(m):猴子摘到香蕉 条件:AT(monkey,m)?~HAND(s)?AT(box,m)?AT(banana,m)?ONBOX(monkey) 动作:4. 5. 删除:~HAND(s) 增加:HAND(banana) 按照行动计划,一步步进行状态替换,直至目标状态。 AT(monkey,a)?~HAND(s)?AT(box,c)?~ONBOX(monkey)?AT(banana,b) AT(monkey,c)?HAND(box)?AT(box,c)?~ONBOX(monkey)?AT(banana,b) AT(monkey,b)?~HAND(s)?AT(box,b)?~ONBOX(monkey)?AT(banana,b) AT(monkey,b)?~HAND(s)?AT(box,b)?ONBOX(monkey)?AT(banana,b) AT(box,b)?ONBOX(monkey)?HAND(banana)?AT(monkey,b)?AT(banana,b) (目标得解) 猴子行动的规则序列是:go(a,c)→movebox(c,b)→onbox(b)→catch(bananan) 四、源代码 #define_CRT_SECURE_NO_WARNINGS #include inti; voidgo(charx,chary) { printf("step%d:monkey从%c走到%c\n",++i,x,y);//x表示猴子的位置,y为箱子的位置 } voidmovebox(charx,chary) { printf("step%d:monkey把箱子从%c运到%c\n",++i,x,y);//x表示箱子的位置,y为香蕉的位置 } voidonbox() { printf("step%d:monkey爬上箱子\n",++i); } voidcatch() { printf("step%d:monkey摘到香蕉\n",++i); } 本文来源:https://www.wddqw.com/doc/f1b6d16cb8d528ea81c758f5f61fb7360a4c2bb4.html