• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 年终总结 > 正文

    猴子摘香蕉实验报告(含代码)x

    时间:2020-10-19 12:38:26 来源:勤学考试网 本文已影响 勤学考试网手机站

    PAGE

    PAGE #

    华中科技大学

    《人工智能与模式识别》

    实验报告

    院 系: 电子与信息工程系

    班 级:

    姓 名:

    同组人:

    指导老师:

    电 话:

    邮 箱:

    日 期:2013年12月24日

    、实验内容

    (即利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图所示, 猴子为了拿到香蕉, 它必须把箱子搬到香蕉下面, 然后再爬到箱子上。

     请定义必要的谓词, 列出问题的初始化状态

    (即

    下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置 b )。(附加:从初始状态到目标状态的谓词

    演算过程。)

    a b c

    二、 实验平台

    VC6.0

    三、 实验分析

    定义描述环境状态的谓词。

    AT(x,w) : x 在 t 处,个体域:x?{monkey} ,w?{a,b,c,box};

    HOLD(x,t) : x 手中拿着 t,个体域:t?{box,ba nan a};

    EMPTY(x) : x手中是空的;

    ON(t,y) : t 在 y 处,个体域:y?{b,c,ceiling};

    CLEAR(y) : y上是空的;

    BOX(u) : u是箱子,个体域: u?{box};

    BANANA(v) : v 是香蕉,个体域: v?{banana};

    使用谓词、连结词、量词来表示环境状态。

    问题的初始状态可表示为:

    S。: AT(monkey,a)?EMPTY(monkey)?ON(box,c)?ON(banana,ceiling)?CLEAR(b)?BOX(box)?

    BANANA(ba nan a)

    要达到的目标状态为:

    Sg: AT(monkey,box)?HOLD(monkey,banana)?ON(box,b)?CLEAR(ceiling)?CLEAR(c)?

    BOX(box)?BANANA(ba nana)

    从初始状态到目标状态的转化 ,猴子需要完成一系列操作,定义操作类谓词表示其动作。

    WALK(m,n):猴子从 m走到n处,个体域: m,n?{a,b,c};

    CARRY(s,r):猴子在 r 处拿到 s,个体域:r?{c,ceili ng} , s?{box,ba nan a};

    CLIMB(u,b):猴子在b处爬上u;

    这3个操作也可分别用条件和动作来表示。条件直接用谓词公式表示,是为完成相应操作所必须具备的条件;当 条件中的事实使其均为真时,则可激活操作规则,于是可执行该规则中的动作部分。动作通过前后状态的变化表示, 即通过从动作前删除或增加谓词公式来描述动作后的状态。

    WALK(m,n):猴子从 m走到n处

    条件:AT(mo nkey,m)

    .删除:AT (monkeym)

    动作:丿

    J曾加:AT (monkey n)

    CARRY(s,r):猴子在r处拿到s

    条件:AT(mo nkey,r)?EMPTY(mo nkey)?ON(s,r)?BOX(box)?BANANA(ba nana)

    动作:<

    删除:EMPTY(monke?/\ON(s,r) 增加:HOLD(monkeys”CLEAR(r)

    CLIMB(u,b):猴子在b处爬上u

    条件:AT(mo nkey,b)?HOLD(mo nkey,u)?CLEAR(b)?BOX(box)?BANANA(ba nana)

    动作:*

    r删除:AT(monkeyb) a HOLD(monkeyu) aCLEAR(c) 增加:AT(monkey u)EMPTY(monke》入ON(u,c)

    4.按照行动计划,一步步进行状态替换,直至目标状态。

    AT(mo nkey,a)?EMPTY(mo nkey)?ON(box,c)?ON(ba nan a,ceili ng)?CLEAR(b)?BOX(box)?

    BANANA(ba nan a)

    WALK(a,c)用a代换m,用c代换n

    AT(m on key,c)?EMPTY(mo nkey)?ON(box,c)?ON(ba nan a,ceili ng)?CLEAR(b)?BOX(box)?

    BANANA(ba nan a)

    CARRY(c,box)用 c代换 s,用 box代换 r

    AT(mo nkey,c)?HOLD(mo nkey,box)?ON(ba nan a,ceili ng)?CLEAR(b)?CLEAR(c)?BOX(box)?

    BANANA(ba nan a)

    WALK (c,b) 用c代换m,用b代换n

    AT(m on key,b)?HOLD(mo nkey,box)?ON(ba nan a,ceili ng)?CLEAR(b)?CLEAR(c)?BOX(box)?

    BANANA(ba nan a)

    ■ CLIMB (box,b)用 box代换 u

    AT(mo nkey,box)?EMPTY(mo nkey)?ON(box,b)?ON(ba nan a,ceili ng)?CLEAR(c)?BOX(box)?

    BANANA(ba nan a)

    CARRY (ba nan a, ceili ng )用 banana 代换 s,用 ceili ng 代换 r

    AT(mo nkey,box)?HOLD(mo nkey,ba nan a)?ON(box,b)?CLEAR(ceili ng)?CLEAR(c)?BOX(box)?

    BANANA(ba nana)(目标得解)

    猴子行动的规则序列是: WALK(a,c)~CARRY(c,box尸WALK(c,b)~CLIMB(box,b)宀

    CARRY(ba nan a,ceili ng)

    在上述过程中,我们应该注意,当猴子执行某一个操作之前,需要检查当前状态是否可使所要求的条件得到满足, 即证明当前状态是否蕴涵操作所要求的状态的过程。在行动过程中, 检查条件的满足性后才进行变量的代换。代入新

    条件后的新状态如果是目标状态,则问题解决;否则看是否满足下面的操作,如果不满足或即使满足却又回到了原来 的状态,那么代入无效。

    四、源代码

    #i nclude <stdio.h>

    struct State

    {

    in t mon key; /*-1:Mo nkey at A;0: Mo nkey at B;1:Mo nkey at C;*/

    int box; /*-1:box at A;0:box at B;1:box at C;*/

    int banana; /*Banana at B,Ba nan a=0*/

    int mon box; /*-1: mon key on the box;1: mon key the box;*/

    };

    struct State States [150];

    char* routesave[150];

    /*fu nctio n mon keygoto,it makes the mon key goto the other place*/ void mon keygoto(i nt b,i nt i)

    {

    int a;

    a=b;

    if (a==-1)

    {

    routesave[i]=" Mon key go to A";

    States[i+1]=States[i];

    States[i+1].mo nkey=-1;

    }

    else if(a==O)

    {

    routesave[i]=" Mon key go to B";

    States[i+1]=States[i];

    States[i+1].mo nkey=0;

    }

    else if(a==1)

    {

    routesave[i]=" Mon key go to C";

    States[i+1]=States[i];

    States[i+1].mo nkey=1;

    }

    else

    {

    prin tf("parameter is wron g");

    }

    }

    /*e nd fun cti on mon keyygoto*/ /*fu nction movebox,the mon key move the box to the other place*/ void movebox(i nt a,i nt i) {

    int B;

    B=a;

    if(B==-1)

    {

    routesave[i]=" mon key move box to A";

    States[i+1]=States[i];

    States[i+1].mo nkey=-1;

    States[i+1].box=-1;

    }

    else if(B==0)

    {

    routesave[i] = "mon key move box to B"; States[i+1]=States[i];

    States[i+1].mo nkey=0;

    States[i+1].box=0;

    }

    else if(B==1)

    {

    routesave[i] = "mon key move box to C";

    States[i+1]=States[i];

    States[i+1].mo nkey=1;

    States[i+1].box=1;

    }

    else

    {

    prin tf("parameter is wron g");

    }

    }

    /*e nd fun cti on movebox*/

    /*fu nctio n climb on to,the mon key climb on to the box*/

    void climb on to(i nt i)

    {

    routesave[i]=" Mon key climb onto the box";

    States[i+1]=States[i];

    States[i+1].m on box=1;

    }

    /*fu nctio n climbdow n,m on key climb dow n from the box*/

    void climbdow n(i nt i)

    {

    routesave[i]=" Mon key climb dow n from the box";

    States[i+1]=States[i];

    States[i+1].m on box=-1;

    }

    /*fu nction reach,if the mon key,box,a nd banana are at the same place,the mon key reach banana*/ void reach(i nt i)

    {

    routesave[i]=" Mon key reach the banan a";

    }

    /*output the soluti on to the problem*/

    void showSoluti on (i nt i)

    {

    int c;

    printf ("%s \n", "Result to problem:");

    for(c=0; c<i+1; c++)

    {

    printf ("Step %d : %s \n ”,c+1,routesave[c]);

    }

    prin tf("\n");

    } /*perform n ext step*/

    }else

    }

    else

    PAGE #

    void n extStep(i nt i)

    {

    int c;

    int j;

    if(i>=150)

    {

    prin tf("%s \n", "steple ngth reached 150,have problem ");

    return;

    }

    for (c=0; c<i; C++) /*if the curre nt state is same to previous,retrospect*/

    {

    if(States[c]. mon key==States[i].m onkey&&States[c].box==States[i].box&&States[c].ba nan a==States[i].ba nana&& States[c]. mon box==States[i].m on box)

    {

    return;

    }

    }

    if(States[i].mo nbox==1 &&States[i].mo nkey==0&&States[i].ba nan a==0&&States[i].box==0)

    {

    showSoluti on (i);

    prin tf("Press any key to continue \n");

    getchar();/*to save scree n for user,press any key to con ti nu e*/ return;

    }

    j=i+1;

    if(States[i].m on key==0)

    {

    if(States[i].box==0)

    {

    if(States[i].m on box==-1)

    {

    climb on to(i);

    reach(i+1);

    n extStep(j);

    /*mon keygoto(-1,i);

    n extStep(j);

    mon keygoto(0,i);

    n extStep(j);

    movebox(-1,i);

    n extStep(j);

    movebox(0,i);

    n extStep(j);*/

    reach(i+1); nextStep(j); /*climbdow n(i); n extStep(j);*/

    }

    }

    else if(States[i].box==1) {

    /*m on keygoto(-1,i); nextStep(j);*/ mon keygoto(1,i);

    n extStep(j); movebox(0,i);

    n extStep(j); climb on to(i); reach(i+1);

    n extStep(j);

    }

    else /*box==-1*/ {

    mon keygoto(-1,i); n extStep(j);

    movebox(0,i); n extStep(j); climb on to(i);

    reach(i+1); n extStep(j);

    }

    }

    /*end if*/

    if(States[i].m on key==-1)

    {

    if(States[i].box==-1)

    {

    if(States[i].m on box==-1) {

    movebox(0,i);

    n extStep(j); climb on to(i);

    reach(i+1);

    n extStep(j);

    PAGE

    PAGE #

    }else

    }

    else

    PAGE #

    climbdow n(i); n extStep(j); movebox(0,i); n extStep(j); climb on to(i); reach(i+1); n extStep(j);

    }

    }

    else if(States[i].box==0)

    {

    mon keygoto(0,i); n extStep(j);

    climb on to(i); reach(i+1);

    n extStep(j);

    }

    else

    {

    mon keygoto(1,i); n extStep(j); movebox(0,i);

    n extStep(j); climb on to(i); reach(i+1);

    n extStep(j);

    }

    }

    /*end if*/

    if(States[i].m on key==1)

    {

    if (States[i].box==1)

    {

    if(States[i].m on box==-1) {

    movebox(0,i); n extStep(j);

    climb on to(i); reach(i+1);

    n extStep(j);

    {

    climbdow n(i); n extStep(j); movebox(0,i); n extStep(j); climb on to(i); reach(i+1);

    n extStep(j);

    }

    }

    else if(States[i].box==-1) {

    mon keygoto(-1,i); n extStep(j); movebox(0,i);

    n extStep(j); movebox(0,i);

    n extStep(j); climb on to(i); reach(i+1);

    n extStep(j);

    }

    else {

    mon keygoto(0,i); n extStep(j);

    movebox(0,i); n extStep(j); climb on to(i);

    reach(i+1); n extStep(j);

    }

    }

    /*end if*/

    }/*end nextStep*/

    int mai n()

    {

    States[0].mo nkey=-1;

    States[0].box=1;

    States[0].ba nan a=0;

    States[0].mo nbox=-1;

    n extStep(0);

    }

    Hsu ,w

    Hsu ,w

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问