人工智能基础—上机1:猴子摘香蕉

一、题目

利用一阶谓词逻辑求解猴子摘香蕉问题:房内有一个猴子,一个箱子,天花板上挂了一串香蕉,其位置如图 1 所示,猴子为了拿到香蕉,它必须把箱子搬到香蕉下面,然后再爬到箱子上。请列出问题的初始化状态(即下图所示状态),目标状态(猴子拿到了香蕉,站在箱子上,箱子位于位置 b),并编程实现解题过程。

二、解题思路

正向思维:猴子走到箱子->猴子将箱子搬到香蕉下->猴子爬上箱子->猴子摘到香蕉;
逆向思维:猴子要摘到香蕉,就得站在箱子上,在这之前它得爬上箱子,再之前得将箱子搬到香蕉下,再之前得走到箱子所在的位置;

三、代码

#include <iostream>
using namespace std;
struct state
{char monkey;//猴子的位置:∈{a,b, c}char banana;//香蕉的位置:∈{a,b, c}char box;//箱子的位置:∈{a,b, c}int have;//猴子是否拿到香蕉int on;//猴子是否在箱子上
};
static int step = 0;//记录步数
bool go_to_box(struct state& s)
{//猴子不在箱子处要先走向箱子if (s.monkey != s.box){step++;cout<<"第"<<step<<"步:" << "猴子从" << s.monkey << "处走到箱子" << s.box << endl;s.monkey = s.box;return true;}return false;
}
bool move_box(struct state& s)
{   //猴子到达箱子处要移动箱子到香蕉下(箱子和香蕉在同一位置就不需要移动了)if (s.monkey == s.box && s.box!=s.banana){step++;cout << "第" << step << "步:" << "猴子把箱子从" << s.box << "处移到" << s.banana << endl;s.monkey = s.banana;s.box = s.banana;return true;}return false;
}
bool climb_box(struct state& s)
{//猴子把箱子搬到香蕉下就可以爬上箱子if (s.monkey == s.banana && s.box == s.banana && s.on == 0){s.on = 1;step++;cout << "第" << step << "步:"<< "猴子在" << s.monkey << "处爬上箱子" << endl;return true;}return false;
}
bool get_banana(struct state& s)
{//猴子爬上箱子就可摘香蕉了if (s.monkey == s.banana && s.box == s.banana && s.on == 1){s.have = 1;step++;cout << "第" << step << "步:" << "猴子摘得香蕉!" << endl;return true;}return false;
}
void pick(struct state& s)
{//逆向思考:如果猴子已经摘得香蕉就退出if (get_banana(s) == true){return;}if (climb_box(s) == true){get_banana(s);return;}if (move_box(s) == true){climb_box(s);get_banana(s);return;}if (go_to_box(s) == true){move_box(s);climb_box(s);get_banana(s);return;}}
int main()
{char monkey, banana, box;struct state s;cout << "用a,b,c表示猴子、香蕉、箱子的位置,中间用空格隔开" << endl;cin >> monkey >> banana >> box;cout << endl;cout << "猴子摘香蕉的过程如下:" << endl;//初始化 s.monkey = monkey;s.banana = banana;s.box = box;s.have = 0;s.on = 0;//摘香蕉过程 pick(s);system("pause");return 0;}

文章参考自:https://blog.csdn.net/weixin_43979090/article/details/108768141

人工智能基础---上机1:猴子摘香蕉相关推荐

  1. 【SC应用】【人工智能】Java实现猴子摘香蕉,动画显示

    人工智能课程实验一的任务,写出猴子摘香蕉问题的知识表示,并用代码实现推理过程 问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一 ...

  2. C#编写简单的人工智能课程的实验-猴子摘香蕉

    1.实验内容 用C#,编写完成了使用者分别输入猴子.香蕉.箱子所在的位置,输出完整的猴子摘香蕉的过程. 2.大致逻辑 首先由使用者输入猴子.箱子和香蕉所在的位置,首先判断猴子和箱子是否在同一位置,若不 ...

  3. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次.docx...

    人工智能课内实验报告(8次)学 院: 自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号: 目 录课内实验1:猴子摘香蕉问题的VC编程实现--------1课内实验2:编程实现简单动 ...

  4. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -...

    人工智能课内实验报告 (8次) 学 院:自动化学院 班 级: 智能1501 姓 名: 刘少鹏(34) 学 号:06153034 目 录 课内实验1:猴子摘香蕉问题的VC编程实现????????1 课内 ...

  5. 【C++】人工智能实验一 猴子摘香蕉/传教士与野人(含完整代码与状态迁移图)

    文章目录 一.猴子摘香蕉问题 1.问题描述 2.解题思路 3.实验结果及分析 实验结果一 实验结果二 实验结果三 4.实验结果 5.实验代码 二.传教士(牧师)与野人问题 1.问题描述 2.实验步骤 ...

  6. 人工智能猴子摘香蕉问题

    猴子摘香蕉问题: 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下 ...

  7. JAVA语言写的人工智能小实验——猴子摘香蕉

    背景简介/问题描述 一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等).设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态 ...

  8. 猴子摘香蕉问题-人工智能模拟

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

  9. 人工智能程序——猴子摘香蕉(C语言)

    问题说明: 房间内有一只猴子,一个箱子和一个挂在天花板上的香蕉.三者的位置如下图所示: 初始状态:三者在输入的初始位置,猴子手上无香蕉,猴子不在箱子上. 目标状态:三者均在香蕉对应的位置,猴子手上有香 ...

最新文章

  1. Java 多个引用类型变量引用同一个对象
  2. 微信红包API接口(PHP)
  3. Java JDBC PreparedStatement类
  4. View 绘制体系知识梳理(4) 绘制过程之 Layout 详解
  5. 服务器入站规则 共享文件,How to :发布内部网络中的文件共享服务
  6. JavaCV 绘制多边形
  7. QQ音乐付费格式转换
  8. 开源语音Speex丨Windows环境配置和测试(一)
  9. LINUX修改主机名称(立即永久生效)
  10. 微信服务号认证小程序
  11. opencv根据摄像头名称打开摄像头(附源码)
  12. 宝石熔炼设备可以融化黄金吗?
  13. DICOM的理解与学习2
  14. 一个简单音乐播放器的java实现(一)
  15. 线上卖家居股价却涨成妖股 Wayfair低位反弹能否继续拉升?
  16. npm 包管理及 registry 或 proxy 配置
  17. Android 开发:(十四)NavigationBar篇-自定义顶部导航栏
  18. 我要双休,单休等于没有休
  19. 井字棋小游戏代码(Visual Studio)
  20. BZOJ 4589 Hard Nim

热门文章

  1. 用 Python 进行 Curses 编程
  2. Windows下安装Curses库 + 查看pip所支持whl版本
  3. 数学建模 优化问题——数学规划
  4. 轴承热处理,你了解吗?
  5. 错误 0x80070570: 文件或目录损坏无法删除 (磁盘、硬盘、U盘)
  6. 11、ByteBuffer(分散读集中写)
  7. 三维数字沙盘电子沙盘人工智能地理信息系统开发教程第14课
  8. 使用PyLint分析评估代码质量
  9. 达梦数据库一键化启停脚本设计注意事项
  10. div布局、table布局、flex布局、多列布局、网格布局 示例