版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能课内试验报告〔8〕学院:自动化学院班级:1501姓名:〔34〕学号:课内试验1:猴子摘香蕉问题的VC编程实现… 1课内试验2:编程实现简洁动物识别系统的学问表示… 5课内试验3盲目搜寻求解8数码问题… 18课内试验4回溯算法求解四皇后问题… 33课内试验5编程实现一字棋玩耍… 37课内试验字句集消解试验… 46课内试验7简洁动物识别系统的产生式推理… 66课内试验8编程实现D-S证据推理算法… 78人工智能课内试验报告1:猴子摘香蕉问题的VC学院:自动化学院班级:1501姓名:刘少鹏〔33〕学号:06153034日期:2022-3-810:15-12:001试验1:猴子摘香蕉问题的VC编程实现一、试验目的生疏谓词规律表示法;把握人工智能谓词规律中的经典例子——猴子摘香蕉问题的编程实现。二、编程环境VC语言三、问题描述房子里有一只猴子〔即机器人,位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,假设猴子站到箱子上,就可以摸着天花板。如1VC语言编程实现猴子摘香蕉问题的求解过程。图1 猴子摘香蕉问题四、源代码#include<stdio.h>unsignedinti;voidMonkey_Go_Box(unsignedcharx,unsignedchary){2printf(“Step%d:monkey从%c走到%c\n“,++i,x,y);//x表示猴子的位置,y为箱子的位置}voidMonkey_Move_Box(charx,chary){printf(“Step%d:monkey把箱子从%c运到%c\n“,++i,x,y);//x表示箱子的位置,y为香蕉的位置}voidMonkey_On_Box{printf(“Step%d:monkey爬上箱子\n“,++i);}voidMonkey_Get_Banana{printf(“Step%d:monkey摘到香蕉\n“,++i);}voidmain{unsignedcharMonkey,Box,Banana;printf(“********智能1501班**********\n“);printf(“********06153034************\n“);printf(“********刘少鹏**************\n“);printf(“请用abc来表示猴子箱子香蕉的位置\n“);printf(“Monkey\tbox\tbanana\n“);scanf(“%c“,&Monkey);getchar;printf(“\t“);scanf(“%c“,&Box);getchar;printf(“\t\t“);scanf(“%c“,&Banana);getchar;printf(“\n操作步骤如下\n“);if(Monkey!=Box){Monkey_Go_Box(Monkey,Box);}if(Box!=Banana){Monkey_Move_Box(Box,Banana);}Monkey_On_Box;Monkey_Get_Banana;printf(“\n“);3getchar;}五、试验结果相关截图六、心得体会通过本次试验,我初步了学会了使用VC的建工程,并且进展简洁的程序编写。VC编程给出具体的操作步骤,感觉对VC编程有了的生疏。在试验中我也遇到过很多问题,比方在我fatalerrorC1010:在查找预编译头时遇e我工程的每一个cpp自己解决问题的力量。4人工智能课内试验报告2:编程实现简洁动物识别系统的学问表示学院:自动化学院班级:1501姓名:〔33〕学号:06153034日期:2022-3-1310:15-12:00510试验2:编程实现简洁动物识别系统的学问表示一、试验目的1、理解和把握产生式学问表示方法;2、能够通过VC一、试验目的1、理解和把握产生式学问表示方法;2、能够通过VC编程语言实现产生式系统的规章库。二、试验内容1、以动物识别系统的产生式规章为例;2、用选定的编程语言建筑规章库和综合数据库,并能对它们进展增加、删除和修改操作。三、试验步骤1、确定需要识别的动物及其属性本次试验的简洁动物识别系统总共能识别本次试验的简洁动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟和信天翁。2、建立识别七种动物识别系统的规章3、选定编程语言并确定综合数据库和规章库构造〔1〕选用C语言作为编程语言〔2〕综合数据库的建立〔2〕综合数据库的建立〔3〕规章库的建立四、程序源代码#include<iostream>#include<string>usingnamespacestd;structRULES{intcount;charpre[255];charback[255];intmark;};voidcheck;RULESr[100]={{1,“有毛发“,“哺乳动物“,0},{1,“有奶“,“哺乳动物“,0},{1,“有羽毛“,“鸟“,0},{2,“会飞&下蛋&“,“鸟“,0},{1,“吃肉“,“食肉动物“,0},
//全部规章静态数据库{3,“有锐利的牙齿&有爪&眼睛盯着前方&“,“食肉动物“,0},{2,“哺乳动物&有蹄&“,“有蹄类哺乳动物“,0},{2,“哺乳动物&反刍&“,“有偶蹄类哺乳动物“,0},{4,“哺乳动物&食肉动物&黄褐色&有暗斑&“,“金钱豹“,0},{4,“哺乳动物&食肉动物&黄褐色&黑色条纹&“,“老虎“,0},{4,“有蹄类哺乳动物&有长脖子&有长腿&有暗斑&“,“长颈鹿“,0},{2,“有蹄类哺乳动物&黑条纹&“,“斑马“,0},{5,“鸟&不会飞&有长脖子&有长腿&黑白色&“,“鸵鸟“,0},{4,“鸟&不会飞&会游泳&黑白色&“,“企鹅“,0},{2,“鸟&会飞&“,“信天翁“,0},{1,“反刍“,“哺乳动物“,0}};intnumber;intm;intcat=15;inta;intlength;
//输入的事实长度stringf[255]; //输入的事实数组voidinput{while(1){cat++;cout<<“number“<<endl;cin>>r[cat].count;cout<<“输入事实,两种以上的事实请在每个事实后加上‘&’符号“<<endl;cin>>r[cat].pre;cout<<“输入结果“<<endl;cin>>r[cat].back;r[cat].mark=0;while(1){cout<<“输入“1”连续添加规章,输入“2”查看规章库“<<endl;intp;cin>>p;if(p==1){}else{
input;if(p==2){}else{}}}}}
check;cout<<“输入错误,重输入“<<endl;voiddelate{cout<<“输入要删除的条数“<<endl;intbar;cin>>bar;for(intt=0;t<=cat;t++){r[bar-1]=r[bar];bar++;}cat--;check;}voidcheck{cout<<endl<<“规章库如下“<<endl;for(inti=0;i<=cat;i++){cout<<i+1<<“.“<<“由“<<r[i].pre<<“可得“<<r[i].back<<endl;}cout<<endl;while(1){cout<<“输入“1”连续添加规章,输入“3”删除选定的规章“<<endl;cin>>m;if(m==1){input;}else{if(m==3)delate;}}}intfind_rule(ints){
//查找规章库中是否还有可使用的规章for(inti=0;i<=15;i++)s=s*r[i].mark;//cout<<“find_rule结果“<<s<<endl;returns;}intcompare1(RULESr) //当前提条件为1时{intj=0,i=1;stringstr,str2;str=r.pre;while(i<=length){if(f[i]==str){}else}
str2=r.back;f[length+1]=str2;length++;r.mark=1;break;i++;
//参加事实库//事实库的长度加1//标记规章已使用过returnr.mark;}intcompare2(RULESr){
//前提条件不为1stringb[10];stringstr,str2;inti,j=1,num=0;inta=0;str=r.pre;for(i=0;i!=10;++i) //转换数组{b[i]=““;}for(i=0;i!=str.length;++i){if(str.at(i)!=”&”){}else{}}
b[j]+=str.at(i);j++;i=1;while(i<=r.count){for(j=1;j!=length+1;j++){if(f[j]==b[i]){a+=1;}}i++;}if(a==r.count){str2=r.back;f[length+1]=str2;length++;r.mark=1;}
//参加事实库//事实库的长度加1//标记规章已使用过returnr.mark;}voidresult{inti=1,m=0;while(i!=length+1){if(f[i]==“金钱豹“){}else
cout<<“该动物是金钱豹“<<endl;m=1;break;if(f[i]==“老虎“){cout<<“该动物是老虎“<<endl;m=1;11}else
break;if(f[i]==“长颈鹿“){}else
cout<<“该动物是长颈鹿“<<endl;m=1;break;if(f[i]==“斑马“){}else
cout<<“该动物是斑马“<<endl;m=1;break;if(f[i]==“鸵鸟“){}else
cout<<“该动物是鸵鸟“<<endl;m=1;break;if(f[i]==“企鹅“){}else
cout<<“该动物是企鹅“<<endl;m=1;break;if(f[i]==“信天翁“){}else}
cout<<“信天翁“<<endl;m=1;break;i++;if(m==0)cout<<“没有符合的动物,请确认特征,重输入“<<endl;13}voididetify{inti=0,u=0;if(find_rule(u)==0) //假设规章库中还有未使用的规章{//cout<<“还有未使用的规章“<<endl;intnum=length;while(i<16){
//从第一条规章开头遍历if(r[i].mark==0){
//假设该条规章未使用if(r[i].count==1){
//该条规章前提数为1u=compare1(r[i]);if(u==1)r[i].mark=1;if(r[i].mark==1){}}else{
cout<<“使用规章“<<i+1;cout<<“且参加的事实为“<<r[i].back<<endl;u=compare2(r[i]);if(u==1)r[i].mark=1;if(r[i].mark==1){cout<<“使用规章“<<i+1;cout<<“且参加的事实为“<<r[i].back<<endl;}}}if(i==15){if(num!=length){}else}
i=0;num=length;i=16;}}else{
else{}
i++;cout<<“全部的规章都已使用“<<endl;}result;}/*主函数*/voidmain{cout<<“******智能1501班********“<<endl;cout<<“******06153034**********“<<endl;cout<<“******刘少鹏************“<<endl;cout<<“进展动物识别请输入7“<<endl;cout<<“进展规章库操作请输入8“<<endl;cin>>a;while(a==8){ while(1){cout<<“添加规章输入‘1’,查看已有规章输入‘2’“<<endl;cin>>m;if(m==1){}else{
input;if(m==2){}else}}}
check;cout<<“输入错误请重输入“<<endl;if(a==7){intu=0;cout<<“请输入动物的特征数“<<endl;cin>>length;cout<<“请输入动物的特征“<<endl;for(inti=1;i<=length;i++)cin>>f[i];idetify;}system(“pause“);}五、试验结果相关截图1、程序总体构造2143、规章库操作→添加规章→添加袋鼠规章1545、动物识别→识别长颈鹿六、心得体会16只有对数据库有清楚的把握,同时生疏规章才能合理编程,因此我在寻常的学习中应当加大数据库与数据构造的学习力度,提高自己的编程力量。17人工智能课内试验报告3:盲目搜寻求解八数码问题学院:自动化学院班级:1501姓名:刘少鹏〔33〕学号:06153034日期:2022-03-3010:15-12:001819人工智能课内试验3:盲目搜寻求解8数码问题1(2)生疏状态空间中的盲目搜寻策略;28数码问题3承受宽度优先算法,运行程序,要求输入初始状态S0283164705Sg216408753验证程序的输出结果,写出心得体会。〔2〕对代码进展修改〔选作,实现深度优先搜寻求解该问题有被扩展的节点。这样也需要对节点添加一个是否被扩展过的标志。源代码及试验结果截图〔1〕#include<stdlib.h>#include<stdio.h>TypedefstructNodeintnum[9]//棋盘状态intdeepth//g(n)intdiffnum//不在位的数目h(n)intvalue//耗散值f(n)=g(n)+h(n)structNode*pre;structNode*next;structNode*parent;}numNode;/*--endofstructnumNode--*/intorigin[9]//棋盘初始状态inttarget[9]//棋盘目标状态intnumNode_num,total_step;Close表numNode*create_numNode{return(numNode*)malloc(sizeof(numNode));}Open表中删除//Open表中按序插入节点voidclose_append(numNode*headnumNode*item)//向Close表中插入节点intexpand(numNode*item)//扩展节点intprint_result(numNode*item)//打印结果numNode*copy_numNode(numNode*orgin);charisNewNode(numNode*opennumNode*closeintnum[9])//是否在表中voidprint_num(intnum[9])//打印棋盘状态intdiff(intnum[9])//求不在位棋子的个数voidinit//初始化,获得棋盘初始状态和目标状态voidswap(int*aint*b);intoperate(intnum[],intop);voidfree_list(numNode*head);//*Name:主函數//*Description:程序入口intmain(intargc,char*argv[]){Close表printf(“*****刘少鹏******\n“);printf(“*****06153034****\n“);opencreate_numNode;close=create_numNode;open->preopen->nextclose->preclose->nextNULL;init//由用户输入初始和目标状态//初始化初始节点numNode*p1;p1=create_numNode;p1->parent=NULL;p1->deepth=0;inti=0;for(i=0;i<9;i++){p1->num[i]=origin[i];}open_insert(open,p1);numNode_num=1;p1=open_getfirst(open);while(p1!=NULL){close_append(close,p1);if(expand(p1))returnEXIT_SUCCESS;22p1=open_getfirst(open);}printf(“Nosolution!\n“);returnEXIT_SUCCESS;} /*----------endoffunctionmain */voidinit{while(1){
printf(“Pleaseinputopriginalstatus:\nForexample:123456780stands“1 2 3\n““4 5 6\n““7 8 0\n“);chartemp[10];scanf(“%s“,&temp);inti=0;for(i=0;i<9&&temp[i]-”0”>=0&&temp[i]-”0”<=8;i++){origin[i]=temp[i]-”0”;}printf(“Pleaseinputtargetstatus:\n“);scanf(“%s“,&temp);intj=0;for(j=0;j<9&&temp[j]-”0”>=0&&temp[j]-”0”<=8;j++){target[j]=temp[j]-”0”;}system(“cls“);if(i==9&&j==9)29{break;}}} /*-----endoffunctioninit */voidopen_insert(numNode*head,numNode*item){numNode*p,*q;p=head->next;q=head;while(p!=NULL&&item->value>p->value){q=p;p=p->next;}q->next=item;item->pre=q;item->next=p;if(p!=NULL){p->pre=item;}} /*-----endoffunctionopen_insert */numNode*open_getfirst(numNode*head){numNode*p;if(head->next==NULL){returnNULL;}p=head->next;head->next=p->next;if(p->next!=NULL){p->next->pre=head;}p->pre=NULL;p->next=NULL;returnp;} /*-----endoffunctionopen_getfirst */voidclose_append(numNode*head,numNode*item){item->next=head->next;item->pre=head;head->next=item;if(item->next!=NULL){item->next->pre=item;}} /*-----endoffunctionclose_append */intexpand(numNode*p1){numNode*p2;intop=1;for(op=1;op<=4;op++){p2=copy_numNode(p1);operate(p2->num,op);if(isNewNode(open,close,p2->num)==”N”){p2->parent=p1;p2->deepth=p1->deepth+1;p2->diffnum=diff(p2->num);p2->value=p2->deepth+p2->diffnum;if(p2->diffnum==0){}
}{}
total_step=print_result(p2);printf(“Totalstep:%d\n“,total_step);free_list(open);return1;numNode_num++;open_insert(open,p2);free(p2);}return0;} /*-----endoffunctionexpand */intoperate(intm[],intop){intblank;blank=0;while(m[blank]!=0&&blank<9)++blank;if(blank==9)return1;switch(op){case1:/*up*/if(blank>2)swap(m+blank,m+blank-3);break;case2:/*down*/if(blank<6)swap(m+blank,m+blank+3);break;case3:/*left*/if(blank!=0&&blank!=3&&blank!=6)swap(m+blank,m+blank-1);break;case4:/*right*/if(blank!=2&&blank!=5&&blank!=8)swap(m+blank,m+blank+1);break;default:return1;}return0;}voidswap(int*a,int*b){intc;c=*a;*a=*b;*b=c;}numNode*copy_numNode(numNode*origin){numNode*p;p=create_numNode;p->deepth=origin->deepth;p->diffnum=origin->diffnum;p->value=origin->value;inti;for(i=0;i<9;i++){(p->num)[i]=(origin->num)[i];}returnp;} /*-----endoffunctioncopy_numNode */intdiff(intnum[9]){inti,diffnum=0;for(i=0;i<9;i++)if(num[i]!=target[i])diffnum++;returndiffnum;} /*-----endoffunctiondiff */charisNewNode(numNode*open,numNode*close,intnum[9]){numNode*p;inti=0;p=open->next;while(p!=NULL){for(i=0;i<9;i++){if(p->num[i]!=num[i])break;}if(i==9)return”O”;//Openp=p->next;}p=close->next;while(p!=NULL){for(i=0;i<9;i++){if(p->num[i]!=num[i])break;}if(i==9)return”C”;//Closep=p->next;}return”N”;} /*-----endoffunctionisNewNode */voidfree_list(numNode*head){numNode*p,*q;p=head->next;while(p!=NULL){ q=p->next;free(p);p=q;}free(head);} /*-----endoffunctionfree_list */voidprint_num(intnum[9]){ inti;for(i=0;i<9;i++){ printf(“%d\t“,num[i]);if((i%3)==2)printf(“\n“);}} /*-----endoffunctionprint_num */intprint_result(numNode*item){numNode*p;intstep;p=item;if(p!=NULL){}{}}
step=print_result(p->parent);printf(“\nStep%d:\n“,step+1);print_num(p->num);returnstep+1;return-1;〔2〕试验截图3031心得体会本次试验对我最大的收获就是我再解决问题的过程中提高了C语言编程力量32人工智能课内试验报告4:回溯算法求解四皇后问题学院:自动化学院班级:1501姓名:刘少鹏〔33〕学号:06153034日期:2022-04-0510:15-12:0034回溯算法求解四皇后问题试验目的:理解搜寻的概念,把握回溯搜寻算法,用回溯算法求解四皇后问题.试验要求:用的总结.试验结果分析:回朔算法总结:223435的问题。试验的心得体会:通过本次试验我理解了搜寻的概念,把握了回溯搜寻算法,学会了用回溯都将一一解决。参考例如代码:#include<stdio.h>#defineboolint#definefalse0#definetrue1intNum=1;//用来记录有几种实现方法intq[5];boolC[5];//C[1]~C[4],布尔型变量,当前列是否安全boolL[9];//L[2]~L[8布尔型变〔i-对角〔从左上角到右下角是否安全 boolR[9];//R[2]~R[8],布尔型变量,〔i+j〕对角线〔从右上角到左下角〕是否安全2<=i+j<=8intqipan[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};voidTry(inti) //皇后放置函数{intj,k,n,m;for(j=1;j<5;j++){if((C[j]==true)&&(L[i-j+5]==true)&&(R[i+j]==true))//ij{q[i]=j; 行,j列安全,就放置皇后在〔i,j〕处C[j]=false; //i行,j列放置皇后后不再安全L[i-j+5]=false; //(i,j)所在的从左上角到右下角的对角线将不再安全R[i+j]=false;if(i<4) //4{Try(i+1); //未放完四个皇后,则接着放下一个}else //四个皇后已经放完{Num++;printf(“方案:%d\n“,Num);for(k=1;k<5;k++){qipan[k-1][q[k]-1]=1;//1,0}for(m=0;m<4;m++){for(n=0;n<4;n++)printf(“%d\t“,qipan[m][n]);printf(“\n“);}for(m=0;m<4;m++) //棋盘再次初始化for(n=0;n<4;n++)qipan[m][n]=0;}C[j]=true; 第三件事,修改安全的标志,回溯L[i-j+5]=true;R[i+j]=true;}}}intmain(void){inti;Num=0;printf(“**********\n“);printf(“****1501****\n“);printf(“****06153034******\n“);printf(“****刘少鹏********\n“);,0\n“);for(i=1;i<5;i++){C[i]=true;}for(i=0;i<9;i++){L[i]=R[i]=true;}Try(1);return0;}人工智能课内试验报告5:编程实现一字棋玩耍学院:自动化学院班级:1501姓名:刘少鹏〔33〕学号:06153034日期:2022-04-1110:15-12:0037395编程实现一字棋玩耍试验目的:理解和把握博弈树的启发式搜寻过程;生疏博弈中两种最根本的搜寻方法——极大微小过程和过程;能够用VC编程语言设计简洁的博弈玩耍。试验要求:VC编程实现一字棋,依据试验结果写出总结。试验结果分析:试验代码#include<iostream>#include<windows.h>#include<conio.h>#include<string>#include<ctime>usingnamespacestd;#defineMAX_NUM1000//计算机获胜的标志#defineNO_BLANK-1001//人获胜的标志#defineTREE_DEPTH3//递归深度#defineNIL1001 //根节点的函数走步评估值classState //棋盘状态节点,一个State实例就是一个棋盘的状态节点,从而形成一颗树状构造{public:intQP[3][3]; //当前棋盘数组inte_fun; //评分结果intchild[9]; //当前棋盘状态下的后一步的全部状态节点intparent; //当前棋盘状态下的父母节点下标intbestChild; //在child[9]里e_fun最优的节点下标};classTic{public:inttmpQP[3][3];//用于层递归的临时棋盘staticints_count;//叶子节点的静态总数StateStates[MAX_NUM];//棋盘状态节点数组Tic{}voidinit//初始化棋盘,将各个位置的棋盘都置为{s_count=0;for(inti=0;i<3;i++)for(intj=0;j<3;j++){States[0].QP[i][j]=0;}States[0].parent=NIL;}voidPrintQP//棋盘界面显示{for(inti=0;i<3;i++){for(intj=0;j<3;j++){cout<<States[0].QP[i][j]<<”\t”;}cout<<endl;}}intIsWin(States)//推断当前的棋盘状态是否有令任何一方获胜{inti=0;for(i=0;i<3;i++){if(s.QP[i][0]==1&&s.QP[i][1]==1&&s.QP[i][2]==1)return1;if(s.QP[i][0]==-1&&s.QP[i][1]==-1&&s.QP[i][2]==-1)return-1;}for(i=0;i<3;i++){if(s.QP[0][i]==1&&s.QP[1][i]==1&&s.QP[2][i]==1)return1;if(s.QP[0][i]==-1&&s.QP[1][i]==-1&&s.QP[2][i]==-1)return-1;}1&&s.QP[1][1]==1&&s.QP[2][2]==1)||(s.QP[2][0]==1&&s.QP[1][1]==1&&s.QP[0][2]==1))return1;if((s.QP[0][0]==-1&&s.QP[1][1]==-1&&s.QP[2][2]==-1)||(s.QP[2][0]==-1&&s.QP[1][1]==-1&&s.QP[0][2]==-1))return-1;return0;}inte_fun(States)//机器智能判定评价函数{boolflag=true;inti=0;for(i=0;i<3;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)flag=false;if(flag)returnNO_BLANK;if(IsWin(s)==-1)return-MAX_NUM;if(IsWin(s)==1)returnMAX_NUM;intcount=0;for(i=0;i<3;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)tmpQP[i][j]=1;elsetmpQP[i][j]=s.QP[i][j];for(i=0;i<3;i++)count+=(tmpQP[i][0]+tmpQP[i][1]+tmpQP[i][2])/3;for(i=0;i<3;i++)count+=(tmpQP[0][i]+tmpQP[1][i]+tmpQP[2][i])/3;count+=(tmpQP[0][0]+tmpQP[1][1]+tmpQP[2][2])/3;count+=(tmpQP[2][0]+tmpQP[1][1]+tmpQP[0][2])/3;for(i=0;i<3;i++)for(intj=0;j<3;j++)if(s.QP[i][j]==0)tmpQP[i][j]=-1;elsetmpQP[i][j]=s.QP[i][j];for(i=0;i<3;i++)count+=(tmpQP[i][0]+tmpQP[i][1]+tmpQP[i][2])/3;for(i=0;i<3;i++)count+=(tmpQP[0][i]+tmpQP[1][i]+tmpQP[2][i])/3;count+=(tmpQP[0][0]+tmpQP[1][1]+tmpQP[2][2])/3;count+=(tmpQP[2][0]+tmpQP[1][1]+tmpQP[0][2])/3;returncount;}virtualboolAutoDone{returnfalse;}voidUserInput//猎取用户的输入{intpos,x,y;L1:cout<<“请输入棋子的坐标xy:“;cin>>pos;x=pos/10,y=pos%10;if(x>0&&x<4&&y>0&&y<4&&States[0].QP[x-1][y-1]==0)States[0].QP[x-1][y-1]=-1;else{cout<<“非法输入!“;gotoL1;}}};intTic::s_count=0;//初始化棋盘状态节点总数,刚开头置为classdemo:publicTic{public:demo{}boolJudge{inti,j,a=0;for(i=0;i<3;i++)for(j=0;j<3;j++)if(States[0].QP[i][j]==0)a++;if(a==0)returntrue;returnfalse;}virtualboolAutoDone{inta,b,i,j,m,n,max,min,x,y;if(IsWin(States[0])==-1){cout<<“恭喜您获胜!“<<endl;returntrue;}a=0,b=0;max=-10000;for(x=0;x<3;x++)for(y=0;y<3;y++)States[11].QP[x][y]=States[0].QP[x][y];for(i=0;i<3;i++)for(j=0;j<3;j++){if(States[0].QP[i][j]==0){a=1;for(x=0;x<3;x++)for(y=0;y<3;y++)States[a].QP[x][y]=States[0].QP[x][y];States[a].QP[i][j]=1;min=10000;for(m=0;m<3;m++)for(n=0;n<3;n++){if(States[a].QP[m][n]==0){States[a].QP[x][y];
b=1;for(x=0;x<3;x++)for(y=0;y<3;y++)States[10].QP[x][y]=States[10].QP[m][n]=-1;States[10].e_fun=e_fun(States[10]);if(States[10].e_fun<min)min=States[10].e_fun;}}States[a].e_fun=min;if(States[a].e_fun>max){max=States[a].e_fun;for(x=0;x<3;x++)for(y=0;y<3;y++)States[11].QP[x][y]=States[a].QP[x][y];}}}for(x=0;x<3;x++)for(y=0;y<3;y++)States[0].QP[x][y]=States[11].QP[x][y];cout<<“计算机走棋“<<endl;PrintQP;if(IsWin(States[0])==1){cout<<“内疚你输了,计算机获胜!“<<endl;returntrue;}elseif(IsWin(States[0])==-1){cout<<“恭喜您获胜!“<<endl;returntrue;}returnfalse;}};voidmain{cout<<“****工程名称:一字棋玩耍的实现****“<<endl;cout<<“****班级:智能1501****“<<endl;cout<<“****姓名:刘少鹏****“<<endl;cout<<“****学号:06153034****“<<endl;cout<<“****说-1代表人落子位置,1代表电脑落子位置,代表该位置无棋子****“<<endl;system(“title#子棋智能小玩耍“);system(“colorA2“);charIsFirst;boolIsFinish;cout<<“假设您为先手,请输入”Y”!反之,请输入”N”:“<<endl;cin>>IsFirst;demo*p=newdemo;p->init;cout<<“棋盘的初始状态:“<<endl;p->PrintQP;do{if(!p->Judge){if(IsFirst==”Y”){p->UserInput;p->PrintQP;if(!p->Judge){IsFinish=p->AutoDone;}}elseif(IsFirst==”N”){IsFinish=p->AutoDone;if(!p->Judge){if(!IsFinish){p->UserInput;p->PrintQP;}}}}if(p->Judge)IsFinish=true;}while(!IsFinish);if((p->IsWin(p->States[0])==0)&&p->Judge){cout<<“平局“<<endl;}system(“pause“);}、试验运行结果截图44、试验心得程和过程。并且将这种思想通过代码表现出来。同学请教等方式,逐一解决了困难,我收获良多。45人工智能课内试验报告6:子句集消解试验学院:自动化学院班级:1501姓名:刘少鹏〔33〕学号:06153034日期:2022-05-810:15-12:004649试验6子句集消解试验一、试验目的生疏子句集化简的九个步骤;二、编程环境VisualStudio2022三、试验原理成相应的子句集。其化简步骤如下:↔”反复使用如下等价公式:P→Q⇔﹁P∨QP↔Q⇔(P∧Q)∨(﹁P∧﹁Q)即可消去谓词公式中的连接词“→”和“反复使用双重否认率﹁(﹁P)⇔P摩根定律﹁(P∧Q)⇔﹁P∨﹁Q﹁(P∨Q⇔﹁P∧﹁Q量词转换率(∀x)P(x⇔(∃x)﹁P(x)(∃x)P(x⇔(∀x)¬P(x)于一个谓词上。对变元标准化有消灭过的任意变元代替,使不同量词约束的变元有不同的名字。化为前束范式化为前束范式的方法:把全部量词都移到公式的左边,并且在移动时不能转变其相对挨次。消去存在量词标准形对上述前束范式的母式应用以下等价关系P∨(Q∧R)⇔(P∨Q)∧(P∨R)消去全称量词消去合取词中的每一个元素都是一个子句。更换变量名称对子句集中的某些变量重命名,使任意两个子句中不消灭一样的变量名。四、试验结果及代码//化简子句集的九步法演示//作者:刘少鹏//时间:2022.5#include<iostream>#include<sstream>#include<stack>#include<queue>usingnamespacestd;//一些函数的定义voidinitString(string&ini);//初始化stringdel_inlclue(stringtemp);//消去蕴涵符号stringdec_neg_rand(stringtemp);//削减否认符号的辖域stringstandard_var(stringtemp);//对变量标准化stringdel_exists(stringtemp);//消去存在量词stringconvert_to_front(stringtemp);//化为前束形stringconvert_to_and(stringtemp);//把母式化为合取范式stringdel_all(stringtemp);//消去全称量词stringdel_and(stringtemp);//消去连接符号合取%stringchange_name(stringtemp);//更换变量名称//关心函数定义boolisAlbum(chartemp);//是字母stringdel_null_bracket(stringtemp);//删除多余的括号stringdel_blank(stringtemp);//删除多余的空格voidcheckLegal(stringtemp);//检查合法性charnumAfectChar(inttemp);//数字显示为字符//主函数voidmain{cout<<“------------------求子句集九步法演示 “<<endl;system(“color0A“);//orign=“Q(x,y)%~(P(y)“;//orign=“(@x)(P(y)>P)“;//orign=“~(#x)y(x)“;//orign=“~((@x)x!b(x))“;//orign=“~(x!y)“;//orign=“~(~a(b))“;stringorign,temp;charcommand,command0,command1,command2,command3,command4,command5,command6,command7,command8,command9,command10;//=============================================================================cout<<“请输入(Y/y)初始化谓词演算公式“<<endl;cin>>command;if(command==”y”||command==”Y”)initString(orign);elseexit(0);//=============================================================================cout<<“请输入(Y/y)消退空格“<<endl;cin>>command0;if(command0==”y”||command0==”Y”){}else
//del_blank(orign);//undonecout<<“消退空格后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)消去蕴涵项“<<endl;cin>>command1;if(command1==”y”||command1==”Y”){}else
orign=del_inlclue(orign);cout<<“消去蕴涵项后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)削减否认符号的辖域“<<endl;cin>>command2;if(command2==”y”||command2==”Y”){do{temp=orign;orign=dec_neg_rand(orign);}while(temp!=orign);}else
cout<<“削减否认符号的辖域后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)对变量进展标准化“<<endl;cin>>command3;if(command3==”y”||command3==”Y”){}else
orign=standard_var(orign);cout<<“对变量进展标准化后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)消去存在量词“<<endl;cin>>command4;if(command4==”y”||command4==”Y”){}else
orign=del_exists(orign);cout<<“消去存在量词后是(w=g(x)Skolem函数)“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)化为前束形“<<endl;cin>>command5;if(command5==”y”||command5==”Y”){}else
orign=convert_to_front(orign);cout<<“化为前束形后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)把母式化为合取方式“<<endl;cin>>command6;if(command6==”y”||command6==”Y”){}else
orign=convert_to_and(orign);cout<<“把母式化为合取方式后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)消去全称量词“<<endl;cin>>command7;if(command7==”y”||command7==”Y”){}else
orign=del_all(orign);cout<<“消去全称量词后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)消去连接符号“<<endl;cin>>command8;if(command8==”y”||command8==”Y”){}else
orign=del_and(orign);cout<<“消去连接符号后是“<<endl<<orign<<endl;exit(0);//=============================================================================cout<<“请输入(Y/y)变量分别标准化“<<endl;cin>>command9;if(command9==”y”||command9==”Y”){orign=change_name(orign);cout<<“变量分别标准化后是(x1,x2,x3x)“<<endl<<orign<<endl;}elseexit(0);===}
//=========================================================================cout<<“-------------------------完毕 “<<endl;cout<<“(Y/y)完毕“<<endl;do{}while(”y”==getchar||”Y”==getchar);exit(0);voidinitString(string&ini){charcommanda,commandb;cout<<“请输入您所需要转换的谓词公式“<<endl;cout<<“需要查看输入帮助(Y/N)?“<<endl;cin>>commanda;if(commanda==”Y”||commanda==”y”)cout<<“本例程规定输入时蕴涵符号为>,全称量词为@,存在量词为#,“<<endl“(、“cout<<“请输入(y/n)选择是否用户自定义“<<endl;cin>>commandb;if(commandb==”Y”||commandb==”y”)cin>>ini;elseini=“(@x)(P(x)>((@y)(P(y)>P(f(x,y)))%~(@y)(Q(x,y)>P(y))))“;cout<<“原始命题是“<<endl<<ini<<endl;}stringdel_inlclue(stringtemp)//消去>蕴涵项{//a>b变为~a!bcharctemp[100]={““};stringoutput;intlength=temp.length;inti=0,right_bracket=0,falg=0;stack<char>stack1,stack2,stack3;strcpy_s(ctemp,temp.c_str);while(ctemp[i]!=”\0”&&i<=length-1){stack1.push(ctemp[i]);if(”>”==ctemp[i+1])//a>b则用~a!b替代{falg=1;if(isAlbum(ctemp[i]))//ctemp[i]弹出{stack1.pop;stack1.push(”~”);stack1.push(ctemp[i]);stack1.push(”!”);i=i+1;}elseif(”)”==ctemp[i]){right_bracket++;do{if(”(”==stack1.top)right_bracket--;stack3.push(stack1.top);stack1.pop;}while((right_bracket!=0));stack3.push(stack1.top);stack1.pop;stack1.push(”~”);while(!stack3.empty){stack1.push(stack3.top);stack3.pop;}}}i++;}
stack1.push(”!”);i=i+1;while(!stack1.empty){stack2.push(stack1.top);stack1.pop;}while(!stack2.empty){output+=stack2.top;stack2.pop;}if(falg==1)returnoutput;else}
returntemp;stringdec_neg_rand(stringtemp)//削减否认符号的辖域{charctemp[100],tempc;stringoutput;intflag2=0;inti=0,left_bracket=0,length=temp.length;stack<char>stack1,stack2;queue<char>queue1;strcpy_s(ctemp,temp.c_str);//复制到字符数组中while(ctemp[i]!=”\0”&&i<=length-1){stack1.push(ctemp[i]);if(ctemp[i]==”~”)//假设是~否则什么都不做{charfo=ctemp[i+2];if(ctemp[i+1]==”(”)//假设是(,否则什么都不做{if(fo==”@”||fo==”#”)//假设是全称量词{flag2=1;i++;stack1.pop;stack1.push(ctemp[i]);if(fo==”@”)stack1.push(”#”);elsestack1.push(”@”);stack1.push(ctemp[i+2]);stack1.push(ctemp[i+3]);stack1.push(”(”);stack1.push(”~”);if(isAlbum(ctemp[i+4])){}elsedo
stack1.push(ctemp[i+4]);i=i+5;i=i+4;55{queue1.push(temp[i]);if(temp[i]==”(”)left_bracket++;elseif(temp[i]==”)”)left_bracket--;i++;}while(left_bracket!=0&&left_bracket>=0);queue1.push(”)”);while(!queue1.empty){}}}i++;}
tempc=queue1.front;queue1.pop;stack1.push(tempc);}while(!stack1.empty){stack2.push(stack1.top);stack1.pop;}while(!stack2.empty){output+=stack2.top;stack2.pop;}if(flag2==1)temp=output;/************************************************************/charctemp1[100];stringoutput1;stack<char>stack11,stack22;intfalg1=0;inttimes=0;intlength1=temp.length,inleftbackets=1,j=0;strcpy_s(ctemp1,temp.c_str);while(ctemp1[j]!=”\0”&&j<=(length1-1)){stack11.push(ctemp1[j]);if(ctemp1[j]==”~”)59{if(ctemp1[j+1]==”(”/*&&ctemp1[j+2]!=”~”*/){j=j+2;stack11.push(”(”);////////////////times>=0)ctemp1[j+2]!=”#”)
while(inleftbackets!=0&&inleftbackets>=0&×<=(length1-j)&&{stack11.push(ctemp1[j]);if(ctemp1[j]==”(”)inleftbackets++;elseif(ctemp1[j]==”)”)inleftbackets--;if(inleftbackets==1&&ctemp1[j+1]==”!”&&ctemp1[j+2]!=”@”&&{falg1=1;stack11.push(”)”);//////////stack11.push(”%”);stack11.push(”~”);stack11.push(”(”);//////////j=j+1;ctemp1[j+2]!=”#”)
}if(inleftbackets==1&&ctemp1[j+1]==”%”&&ctemp1[j+2]!=”@”&&{falg1=1;stack11.push(”)”);//////////stack11.push(”!”);stack11.push(”~”);stack11.push(”(”);//////////j=j+1;}j=j+1;}}}j++;
if(falg1==1)stack11.push(”)”);stack11.pop;stack11.push(”)”);stack11.push(”)”);}while(!stack11.empty){stack22.push(stack11.top);stack11.pop;}while(!stack22.empty){output1+=stack22.top;stack22.pop;}if(falg1==1)temp=output1;/************************************************************/charctemp3[100];stringoutput3;intk=0,left_bracket3=1,length3=temp.length;stack<char>stack13,stack23;intflag=0,bflag=0;strcpy_s(ctemp3,temp.c_str);//复制到字符数组中while(ctemp3[k]!=”\0”&&k<=length3-1){stack13.push(ctemp3[k]);if(ctemp3[k]==”~”){if(ctemp3[k+1]==”(”){if(ctemp3[k+2]==”~”){flag=1;stack13.pop;k=k+2;while(left_bracket3!=0&&left_bracket3>=0){stack13.push(ctemp3[k+1]);if(ctemp3[k+1]==”(”)left_bracket3++;if(ctemp3[k+1]==”)”)left_bracket3--;if(ctemp3[k+1]==”!”|ctemp3[k+1]==”%”)bflag=1;k++;}stack13.pop;}}}k++;}while(!stack13.empty){stack23.push(stack13.top);stack13.pop;}while(!stack23.empty){output3+=stack23.top;stack23.pop;}if(flag==1&&bflag==0)temp=output3;returntemp;}stringstandard_var(stringtemp)//对变量标准化,简化,不考虑多层嵌套{charctemp[100],des[10]={““};strcpy_s(ctemp,temp.c_str);stack<char>stack1,stack2;intl_bracket=1,falg=0,bracket=1;inti=0,j=0;stringoutput;while(ctemp[i]!=”\0”&&i<temp.length){stack1.push(ctemp[i]);if(ctemp[i]==”@”||ctemp[i]==”#”){stack1.push(ctemp[i+1]);des[j]=ctemp[i+1];j++;stack1.push(ctemp[i+2]);i=i+3;stack1.push(ctemp[i]);i++;if(ctemp[i-1]==”(”){while(ctemp[i]!=”\0”&&l_bracket!=0){if(ctemp[i]==”(”)l_bracket++;if(ctemp[i]==”)”)l_bracket--;if(ctemp[i]==”(”&&ctemp[i+1]==”@”){des[j]=ct
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《微波技术总结》课件
- 2022年浙江省嘉兴市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023年黑龙江省鹤岗市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年黑龙江省齐齐哈尔市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2024年内蒙古自治区乌海市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 《梦想学堂使用手册》课件
- 经典搞笑句子
- 英语请假条的格式
- 辽宁省本溪市(2024年-2025年小学六年级语文)统编版小升初模拟(上学期)试卷及答案
- 2025年电池化学品项目规划申请报告模板
- GB 19272-2024室外健身器材的安全通用要求
- 2024版企业股权收购并购重组方案合同3篇
- 2024AIGC创新应用洞察报告
- 统编版2024-2025学年三年级上册语文期末情景试卷(含答案)
- 2024北京通州初三(上)期末数学试卷(含答案解析)
- 市场营销习题库(附参考答案)
- 2024年马拉松比赛项目合作计划书
- 2024年演出经纪人资格《思想政治与法律基础》考前必刷必练题库500题(含真题、必会题)
- 苗圃购销合同范本
- 《二十四节气融入幼儿园教育活动的个案研究》
- 麻醉与舒适医疗
评论
0/150
提交评论