人工智能大作业实验爆款docWord文件下载.docx
- 文档编号:6130387
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:28
- 大小:85.04KB
人工智能大作业实验爆款docWord文件下载.docx
《人工智能大作业实验爆款docWord文件下载.docx》由会员分享,可在线阅读,更多相关《人工智能大作业实验爆款docWord文件下载.docx(28页珍藏版)》请在冰点文库上搜索。
AL(农夫),AL(船),AL(狼),AL(羊),AL(白菜),
问题的目标状态:
AL(农夫),¬
AL(船),¬
AL(狼),¬
AL(羊),¬
AL(白菜)
(4)定义动作
4个动作:
农夫不带来回
农夫带来回
L-R:
农夫自己划船从左岸到右岸
L-R(x):
农夫带着x划船从左岸到右岸
R-L:
农夫自己划船从右岸到左岸
R-L(x):
农夫带着x划船从右岸到左岸
x的个体域是{狼,羊,白菜}。
农夫划船从左岸到右岸
条件:
AL(船),AL(农夫),¬
AL(狼)∨¬
AL(羊)∨¬
动作:
删除表:
AL(船),AL(农夫)
添加表:
AL(农夫)
L-R(狼):
农夫带着狼划船从左岸到右岸
AL(船),AL(农夫),AL(狼),¬
AL(羊)
AL(船),AL(农夫),AL(狼)
AL(狼)
L-R(羊):
农夫带着羊划船从左岸到右岸
AL(船),AL(农夫),AL(羊),AL(狼),AL(白菜)
或:
AL(船),AL(农夫),AL(羊),¬
AL(船),AL(农夫),AL(羊)
L-R(白菜):
农夫带着白菜划船从左岸到右岸
AL(船),AL(农夫),AL(白菜),¬
AL(狼)
AL(船),AL(农夫),AL(白菜)
农夫划船从右岸到左岸
AL(农夫),AL(狼)∨AL(羊),AL(羊)∨AL(白菜)
AL(农夫),¬
AL(白菜),AL(羊)
R-L(羊):
农夫带着羊划船从右岸到左岸
AL(羊),¬
AL(羊),AL(白菜)
(3)问题求解过程
代码如下
#include<
stdio.h>
malloc.h>
typedefintdatatype;
//datatype定义
structseqque//队列结构体
{
intmaxnum;
intf,r;
//存放头尾下标
datatype*q;
};
typedefstructseqque*pseqque;
/*创建一个新的队列*/
pseqquecreatemptyqueue(intm)
pseqquepaqu=(pseqque)malloc(sizeof(structseqque));
//申请结构体动态空间
if(paqu!
=NULL)
{
paqu->
q=(datatype*)malloc(sizeof(datatype)*m);
//申请datatype动态空间
if(paqu->
q)
{
paqu->
maxnum=m;
f=0;
//置头下标为0
r=0;
//置尾下标为0
returnpaqu;
}
elsefree(paqu);
}
printf("
超出存储空间!
"
);
returnNULL;
}
/*入队运算函数*/
voidenque(pseqquepaqu,datatypex)
if((paqu->
r+1)%(paqu->
maxnum)==paqu->
f)
printf("
队列已满!
else
q[paqu->
r]=x;
r=(paqu->
maxnum);
/*出队运算函数*/
voiddeque(pseqquepaqu)
if(paqu->
f==paqu->
r)
空队列!
else
f=(paqu->
f+1)%(paqu->
/*取队列头元素*/
datatypefrontque(pseqquepaqu)
队列为空!
return(paqu->
f]);
/*判断是否为空队列函数*/
intisemptyque(pseqquepaqu)
return1;
return0;
/*判断农夫位置*/
intfarmer(intlocation)
return(0!
=(location&
0x08));
/*判断狼位置*/
intwolf(intlocation)
0x04));
/*判断白菜位置*/
intcabbage(intlocation)
0x02));
/*判断羊位置*/
intgoat(intlocation)
0x01));
/*安全状态的判断函数*/
intsafe(intlocation)
if((goat(location)==cabbage(location))&
&
(goat(location)!
=farmer(location)))
//羊吃白菜
if((goat(location)==wolf(location))&
(wolf(location)!
//狼吃羊
return1;
/*解决农夫问题函数*/
voidfarmerproblem(void)
inti,movers,location,newlocation;
introute[16];
//记录已走过的步骤
pseqquemoveto;
//存放安全的步骤
moveto=createmptyqueue(16);
//创建新队列
enque(moveto,0x00);
//置状态初值
for(i=0;
i<
16;
i++)//置已走过步骤初值
route[i]=-1;
route[0]=0;
while(!
isemptyque(moveto)&
(route[15]==-1))
location=frontque(moveto);
//取头状态为当前状态
deque(moveto);
//删除队列头状态
for(movers=1;
movers<
=8;
<
=1)//依次考虑羊、白菜、狼、农夫的移动
if((0!
0x08))==(0!
movers)))//判断是否和农夫同边
{
newlocation=location^(0x08|movers);
//移动后的状态
if(safe(newlocation)&
(route[newlocation]==-1))//判断是否为安全状态
{
route[newlocation]=location;
//将新的安全状态赋给location
enque(moveto,newlocation);
//新的状态入队列
}
}
if(route[15]!
=-1)//到达最终状态
过程是:
\n"
//输出过程和位置
for(location=15;
location>
=0;
location=route[location])
printf("
位置是:
%d\n"
location);
if(location==0)
exit(0);
elseprintf("
此问题无解!
/*主函数*/
voidmain()
farmerproblem();
实验二:
一个用于动物识别的产生式系统
【实验内容】
设计该系统,让其实现可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种动物。
让学生进一步加深对产生式系统的认识和理解。
其规则库中应包含至少15条规则,假设推理开始时综合数据库中存放有以下事实:
动物有暗斑,有长脖子,有长腿,有奶,有蹄。
6课时:
上机实验6课时。
设计如下:
(1)IDENTIFIER产生式规则
规则I1:
如果该动物有毛发
那么它是哺乳动物
规则I2:
如果该动物有奶
规则I3:
如果该动物有羽毛
那么它是鸟类动物
规则I4:
如果该动物能生蛋
它能飞行
给出的六种动物除了哺乳动物即是鸟类动物,故I1-I4这一组规则可用于区分这两类动物。
规则I5:
如果该动物是哺乳动物
它吃肉
那么它是肉食动物
规则I6:
它长有爪子
它长有利齿
它眼睛前视
规则I7:
它长有蹄
那么它是有蹄动物
规则I8:
它反刍
那么它是有蹄动物,并且是偶蹄动物
I5-I8用于区分哺乳动物中的食肉动物和有蹄动物。
规则I9:
如果该动物是食肉动物
它有暗斑
那么它是金钱豹
规则I10:
它没有暗斑
它有黄色条纹
那么它是老虎
I9-I10用于区分肉食动物。
规则I11:
如果该动物是有蹄动物
它有长脖子
那么它是长颈鹿
规则I12:
它没有长脖子
它有黑白条纹
那么它是斑马
I11-I12用于区分蹄型动物。
规则I13:
如果该动物是鸟类
它有能游水
那么他是会水鸟类
规则I14:
它有长腿
它会飞
那么它是信天翁
规则I15:
如果该动物是会水鸟类
它不会飞
它是黑色和白色的
那么它是信企鹅
I13-I15用于区分鸟类动物。
代码如下:
stdlib.h>
intmain()
inta[5]={0,0,0,0,0};
请输入该动物的特征有的特征输入1无的特征输入0\n\n"
for(intk=0;
k<
5;
k++)
if(k==0)
该动物是否有奶?
elseif(k==1)
该动物是否有蹄?
elseif(k==2)
该动物是否有长腿?
elseif(k==3)
该动物是否有暗斑?
elseif(k==4)
该动物是否有长脖子?
scanf("
%d"
&
a[k]);
输入的序列为:
for(intj=0;
j<
j++)
a[j]);
intb=-1;
for(inti=0;
i++)
if(i==0){
if(a[i]==1){
printf("
该动物是哺乳动物\n"
b=1;
if(a[i]==0){
该动物不是哺乳动物\n"
b=0;
if(i==1){
if(a[i]==1&
b==1){
该动物是有蹄动物\n"
b=11;
if(a[i]==0&
该动物不是有蹄动物\n"
b=10;
if(i==2){
b==0){
该动物有长腿\n"
b=01;
//信天翁
该动物没有长腿\n"
b=00;
//企鹅
if(i==3){
b==10){
该动物有暗斑\n"
b=101;
//猎豹
该动物无暗斑\nn"
b=100;
//老虎
if(i==4){
b==11){
该动物有长脖子\n"
b=111;
//长颈鹿
该动物没有长脖子\n"
b=110;
//斑马
if(b==01)
该动物是信天翁\n"
elseif(b==00)
该动物是企鹅\n"
elseif(b==101)
该动物是猎豹\n"
elseif(b==100)
该动物是老虎\n"
elseif(b==111)
该动物是长颈鹿\n"
elseif(b==110)
该动物是斑马\n"
该动物不存在\n"
system("
pause"
return0;
实验三:
子句消解
iostream.h>
string.h>
#defineN50
#defineM50
voidReplaceString(char*Src,char*a,char*b)
char*ptr;
intlen=strlen(Src);
ptr=(char*)malloc(sizeof(char)*len+10);
strcpy(ptr,Src);
intsubLen_a=strlen(a);
intsubLen_b=strlen(b);
intj;
intk=subLen_b-subLen_a;
for(inti=0;
i<
len;
i++)
if(0==strncmp(&
ptr[i],a,subLen_a))
for(j=i+subLen_a;
ptr[j+k]=ptr[j];
strncpy(&
ptr[i],b,subLen_b);
ptr[len+k]='
\0'
;
strcpy(Src,ptr);
voidxiaojie(chara[],charb[])
charA[N][N],B[N][N];
intn=0,m=0,i,j;
intlenth_a=strlen(a),lenth_b=strlen(b);
for(i=0;
lenth_a;
if(a[i]!
='
V'
)
A[n][m]=a[i];
m++;
else
A[n][m]='
m=0;
n++;
A[n][m]='
intk=n;
//A的记录行数
n=0,m=0;
lenth_b;
if(b[i]!
B[n][m]=b[i];
B[n][m]='
B[n][m]='
intr=n;
//B的记录行数
//检查两子句是否含有互补对
for(n=0;
n<
=k;
n++)
for(m=0;
m<
=r;
m++)
if((B[m][0]=='
~'
)&
(B[m][1]==A[n][0]))//出现互补对
//置换
charx[N][N],y[N][N];
intg=0,h=0;
lenth_a=strlen(A[n]);
lenth_b=strlen(B[m]);
for(i=2;
lenth_a-1;
if(A[n][i]!
'
{
x[g][h]=A[n][i];
h++;
}
else
x[g][h]='
h=0;
g++;
x[g][h]='
g=0,h=0;
for(i=3;
lenth_b-1;
if(B[n][i]!
y[g][h]=B[n][i];
y[g][h]='
y[g][h]='
for(inti=0;
=g;
i++)//置换
if(strlen(x[i])>
=strlen(y[i]))
cout<
x[i]<
/"
y[i]<
endl;
for(j=0;
ReplaceString(B[j],y[i],x[i]);
if(strlen(x[i])<
strlen(y[i]))
cout<
ReplaceString(A[j],x[i],y[i]);
for(i=n;
i++)//消去互补对
strcpy(A[i],A[i+1]);
k=k-1;
for(i=m;
strcpy(B[i],B[i+1]);
r=r-1;
elseif((A[n][0]=='
(A[n][1]==B[m][0]))
y[g]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 作业 实验 doc