人工智能基础---上机1:猴子摘香蕉
人工智能基础上机---猴子摘香蕉
·
人工智能基础—上机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
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)