版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
人工智能課內(nèi)試驗報告〔8〕學院:自動化學院班級:1501姓名:〔34〕學號:課內(nèi)試驗1:猴子摘香蕉問題的VC編程實現(xiàn)… 1課內(nèi)試驗2:編程實現(xiàn)簡潔動物識別系統(tǒng)的學問表示… 5課內(nèi)試驗3盲目搜尋求解8數(shù)碼問題… 18課內(nèi)試驗4回溯算法求解四皇后問題… 33課內(nèi)試驗5編程實現(xiàn)一字棋玩?!?37課內(nèi)試驗字句集消解試驗… 46課內(nèi)試驗7簡潔動物識別系統(tǒng)的產(chǎn)生式推理… 66課內(nèi)試驗8編程實現(xiàn)D-S證據(jù)推理算法… 78人工智能課內(nèi)試驗報告1:猴子摘香蕉問題的VC學院:自動化學院班級:1501姓名:劉少鵬〔33〕學號:06153034日期:2022-3-810:15-12:001試驗1:猴子摘香蕉問題的VC編程實現(xiàn)一、試驗目的生疏謂詞規(guī)律表示法;把握人工智能謂詞規(guī)律中的經(jīng)典例子——猴子摘香蕉問題的編程實現(xiàn)。二、編程環(huán)境VC語言三、問題描述房子里有一只猴子〔即機器人,位于a處。在c處上方的天花板上有一串香蕉,猴子想吃,但摘不到。房間的b處還有一個箱子,假設猴子站到箱子上,就可以摸著天花板。如1VC語言編程實現(xiàn)猴子摘香蕉問題的求解過程。圖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;}五、試驗結(jié)果相關(guān)截圖六、心得體會通過本次試驗,我初步了學會了使用VC的建工程,并且進展簡潔的程序編寫。VC編程給出具體的操作步驟,感覺對VC編程有了的生疏。在試驗中我也遇到過很多問題,比方在我fatalerrorC1010:在查找預編譯頭時遇e我工程的每一個cpp自己解決問題的力量。4人工智能課內(nèi)試驗報告2:編程實現(xiàn)簡潔動物識別系統(tǒng)的學問表示學院:自動化學院班級:1501姓名:〔33〕學號:06153034日期:2022-3-1310:15-12:00510試驗2:編程實現(xiàn)簡潔動物識別系統(tǒng)的學問表示一、試驗目的1、理解和把握產(chǎn)生式學問表示方法;2、能夠通過VC一、試驗目的1、理解和把握產(chǎn)生式學問表示方法;2、能夠通過VC編程語言實現(xiàn)產(chǎn)生式系統(tǒng)的規(guī)章庫。二、試驗內(nèi)容1、以動物識別系統(tǒng)的產(chǎn)生式規(guī)章為例;2、用選定的編程語言建筑規(guī)章庫和綜合數(shù)據(jù)庫,并能對它們進展增加、刪除和修改操作。三、試驗步驟1、確定需要識別的動物及其屬性本次試驗的簡潔動物識別系統(tǒng)總共能識別本次試驗的簡潔動物識別系統(tǒng)總共能識別7種動物,即:老虎、金錢豹、斑馬、長頸鹿、企鵝、鴕鳥和信天翁。2、建立識別七種動物識別系統(tǒng)的規(guī)章3、選定編程語言并確定綜合數(shù)據(jù)庫和規(guī)章庫構(gòu)造〔1〕選用C語言作為編程語言〔2〕綜合數(shù)據(jù)庫的建立〔2〕綜合數(shù)據(jù)庫的建立〔3〕規(guī)章庫的建立四、程序源代碼#include<iostream>#include<string>usingnamespacestd;structRULES{intcount;charpre[255];charback[255];intmark;};voidcheck;RULESr[100]={{1,“有毛發(fā)“,“哺乳動物“,0},{1,“有奶“,“哺乳動物“,0},{1,“有羽毛“,“鳥“,0},{2,“會飛&下蛋&“,“鳥“,0},{1,“吃肉“,“食肉動物“,0},
//全部規(guī)章靜態(tài)數(shù)據(jù)庫{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]; //輸入的事實數(shù)組voidinput{while(1){cat++;cout<<“number“<<endl;cin>>r[cat].count;cout<<“輸入事實,兩種以上的事實請在每個事實后加上‘&’符號“<<endl;cin>>r[cat].pre;cout<<“輸入結(jié)果“<<endl;cin>>r[cat].back;r[cat].mark=0;while(1){cout<<“輸入“1”連續(xù)添加規(guī)章,輸入“2”查看規(guī)章庫“<<endl;intp;cin>>p;if(p==1){}else{
input;if(p==2){}else{}}}}}
check;cout<<“輸入錯誤,重輸入“<<endl;voiddelate{cout<<“輸入要刪除的條數(shù)“<<endl;intbar;cin>>bar;for(intt=0;t<=cat;t++){r[bar-1]=r[bar];bar++;}cat--;check;}voidcheck{cout<<endl<<“規(guī)章庫如下“<<endl;for(inti=0;i<=cat;i++){cout<<i+1<<“.“<<“由“<<r[i].pre<<“可得“<<r[i].back<<endl;}cout<<endl;while(1){cout<<“輸入“1”連續(xù)添加規(guī)章,輸入“3”刪除選定的規(guī)章“<<endl;cin>>m;if(m==1){input;}else{if(m==3)delate;}}}intfind_rule(ints){
//查找規(guī)章庫中是否還有可使用的規(guī)章for(inti=0;i<=15;i++)s=s*r[i].mark;//cout<<“find_rule結(jié)果“<<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//標記規(guī)章已使用過returnr.mark;}intcompare2(RULESr){
//前提條件不為1stringb[10];stringstr,str2;inti,j=1,num=0;inta=0;str=r.pre;for(i=0;i!=10;++i) //轉(zhuǎn)換數(shù)組{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//標記規(guī)章已使用過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) //假設規(guī)章庫中還有未使用的規(guī)章{//cout<<“還有未使用的規(guī)章“<<endl;intnum=length;while(i<16){
//從第一條規(guī)章開頭遍歷if(r[i].mark==0){
//假設該條規(guī)章未使用if(r[i].count==1){
//該條規(guī)章前提數(shù)為1u=compare1(r[i]);if(u==1)r[i].mark=1;if(r[i].mark==1){}}else{
cout<<“使用規(guī)章“<<i+1;cout<<“且參加的事實為“<<r[i].back<<endl;u=compare2(r[i]);if(u==1)r[i].mark=1;if(r[i].mark==1){cout<<“使用規(guī)章“<<i+1;cout<<“且參加的事實為“<<r[i].back<<endl;}}}if(i==15){if(num!=length){}else}
i=0;num=length;i=16;}}else{
else{}
i++;cout<<“全部的規(guī)章都已使用“<<endl;}result;}/*主函數(shù)*/voidmain{cout<<“******智能1501班********“<<endl;cout<<“******06153034**********“<<endl;cout<<“******劉少鵬************“<<endl;cout<<“進展動物識別請輸入7“<<endl;cout<<“進展規(guī)章庫操作請輸入8“<<endl;cin>>a;while(a==8){ while(1){cout<<“添加規(guī)章輸入‘1’,查看已有規(guī)章輸入‘2’“<<endl;cin>>m;if(m==1){}else{
input;if(m==2){}else}}}
check;cout<<“輸入錯誤請重輸入“<<endl;if(a==7){intu=0;cout<<“請輸入動物的特征數(shù)“<<endl;cin>>length;cout<<“請輸入動物的特征“<<endl;for(inti=1;i<=length;i++)cin>>f[i];idetify;}system(“pause“);}五、試驗結(jié)果相關(guān)截圖1、程序總體構(gòu)造2143、規(guī)章庫操作→添加規(guī)章→添加袋鼠規(guī)章1545、動物識別→識別長頸鹿六、心得體會16只有對數(shù)據(jù)庫有清楚的把握,同時生疏規(guī)章才能合理編程,因此我在尋常的學習中應當加大數(shù)據(jù)庫與數(shù)據(jù)構(gòu)造的學習力度,提高自己的編程力量。17人工智能課內(nèi)試驗報告3:盲目搜尋求解八數(shù)碼問題學院:自動化學院班級:1501姓名:劉少鵬〔33〕學號:06153034日期:2022-03-3010:15-12:001819人工智能課內(nèi)試驗3:盲目搜尋求解8數(shù)碼問題1(2)生疏狀態(tài)空間中的盲目搜尋策略;28數(shù)碼問題3承受寬度優(yōu)先算法,運行程序,要求輸入初始狀態(tài)S0283164705Sg216408753驗證程序的輸出結(jié)果,寫出心得體會?!?〕對代碼進展修改〔選作,實現(xiàn)深度優(yōu)先搜尋求解該問題有被擴展的節(jié)點。這樣也需要對節(jié)點添加一個是否被擴展過的標志。源代碼及試驗結(jié)果截圖〔1〕#include<stdlib.h>#include<stdio.h>TypedefstructNodeintnum[9]//棋盤狀態(tài)intdeepth//g(n)intdiffnum//不在位的數(shù)目h(n)intvalue//耗散值f(n)=g(n)+h(n)structNode*pre;structNode*next;structNode*parent;}numNode;/*--endofstructnumNode--*/intorigin[9]//棋盤初始狀態(tài)inttarget[9]//棋盤目標狀態(tài)intnumNode_num,total_step;Close表numNode*create_numNode{return(numNode*)malloc(sizeof(numNode));}Open表中刪除//Open表中按序插入節(jié)點voidclose_append(numNode*headnumNode*item)//向Close表中插入節(jié)點intexpand(numNode*item)//擴展節(jié)點intprint_result(numNode*item)//打印結(jié)果numNode*copy_numNode(numNode*orgin);charisNewNode(numNode*opennumNode*closeintnum[9])//是否在表中voidprint_num(intnum[9])//打印棋盤狀態(tài)intdiff(intnum[9])//求不在位棋子的個數(shù)voidinit//初始化,獲得棋盤初始狀態(tài)和目標狀態(tài)voidswap(int*aint*b);intoperate(intnum[],intop);voidfree_list(numNode*head);//*Name:主函數(shù)//*Description:程序入口intmain(intargc,char*argv[]){Close表printf(“*****劉少鵬******\n“);printf(“*****06153034****\n“);opencreate_numNode;close=create_numNode;open->preopen->nextclose->preclose->nextNULL;init//由用戶輸入初始和目標狀態(tài)//初始化初始節(jié)點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(jiān)”;//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人工智能課內(nèi)試驗報告4:回溯算法求解四皇后問題學院:自動化學院班級:1501姓名:劉少鵬〔33〕學號:06153034日期:2022-04-0510:15-12:0034回溯算法求解四皇后問題試驗目的:理解搜尋的概念,把握回溯搜尋算法,用回溯算法求解四皇后問題.試驗要求:用的總結(jié).試驗結(jié)果分析:回朔算法總結(jié):223435的問題。試驗的心得體會:通過本次試驗我理解了搜尋的概念,把握了回溯搜尋算法,學會了用回溯都將一一解決。參考例如代碼:#include<stdio.h>#defineboolint#definefalse0#definetrue1intNum=1;//用來記錄有幾種實現(xiàn)方法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) //皇后放置函數(shù){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 //四個皇后已經(jīng)放完{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;}人工智能課內(nèi)試驗報告5:編程實現(xiàn)一字棋玩耍學院:自動化學院班級:1501姓名:劉少鵬〔33〕學號:06153034日期:2022-04-1110:15-12:0037395編程實現(xiàn)一字棋玩耍試驗目的:理解和把握博弈樹的啟發(fā)式搜尋過程;生疏博弈中兩種最根本的搜尋方法——極大微小過程和過程;能夠用VC編程語言設計簡潔的博弈玩耍。試驗要求:VC編程實現(xiàn)一字棋,依據(jù)試驗結(jié)果寫出總結(jié)。試驗結(jié)果分析:試驗代碼#include<iostream>#include<windows.h>#include<conio.h>#include<string>#include<ctime>usingnamespacestd;#defineMAX_NUM1000//計算機獲勝的標志#defineNO_BLANK-1001//人獲勝的標志#defineTREE_DEPTH3//遞歸深度#defineNIL1001 //根節(jié)點的函數(shù)走步評估值classState //棋盤狀態(tài)節(jié)點,一個State實例就是一個棋盤的狀態(tài)節(jié)點,從而形成一顆樹狀構(gòu)造{public:intQP[3][3]; //當前棋盤數(shù)組inte_fun; //評分結(jié)果intchild[9]; //當前棋盤狀態(tài)下的后一步的全部狀態(tài)節(jié)點intparent; //當前棋盤狀態(tài)下的父母節(jié)點下標intbestChild; //在child[9]里e_fun最優(yōu)的節(jié)點下標};classTic{public:inttmpQP[3][3];//用于層遞歸的臨時棋盤staticints_count;//葉子節(jié)點的靜態(tài)總數(shù)StateStates[MAX_NUM];//棋盤狀態(tài)節(jié)點數(shù)組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)//推斷當前的棋盤狀態(tài)是否有令任何一方獲勝{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)//機器智能判定評價函數(shù){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;//初始化棋盤狀態(tài)節(jié)點總數(shù),剛開頭置為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<<“內(nèi)疚你輸了,計算機獲勝!“<<endl;returntrue;}elseif(IsWin(States[0])==-1){cout<<“恭喜您獲勝!“<<endl;returntrue;}returnfalse;}};voidmain{cout<<“****工程名稱:一字棋玩耍的實現(xiàn)****“<<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<<“棋盤的初始狀態(tài):“<<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“);}、試驗運行結(jié)果截圖44、試驗心得程和過程。并且將這種思想通過代碼表現(xiàn)出來。同學請教等方式,逐一解決了困難,我收獲良多。45人工智能課內(nèi)試驗報告6:子句集消解試驗學院:自動化學院班級:1501姓名:劉少鵬〔33〕學號:06153034日期:2022-05-810:15-12:004649試驗6子句集消解試驗一、試驗目的生疏子句集化簡的九個步驟;二、編程環(huán)境VisualStudio2022三、試驗原理成相應的子句集。其化簡步驟如下:?”反復使用如下等價公式:P→Q?﹁P∨QP?Q?(P∧Q)∨(﹁P∧﹁Q)即可消去謂詞公式中的連接詞“→”和“反復使用雙重否認率﹁(﹁P)?P摩根定律﹁(P∧Q)?﹁P∨﹁Q﹁(P∨Q?﹁P∧﹁Q量詞轉(zhuǎn)換率(?x)P(x?(?x)﹁P(x)(?x)P(x?(?x)¬P(x)于一個謂詞上。對變元標準化有消滅過的任意變元代替,使不同量詞約束的變元有不同的名字。化為前束范式化為前束范式的方法:把全部量詞都移到公式的左邊,并且在移動時不能轉(zhuǎn)變其相對挨次。消去存在量詞標準形對上述前束范式的母式應用以下等價關(guān)系P∨(Q∧R)?(P∨Q)∧(P∨R)消去全稱量詞消去合取詞中的每一個元素都是一個子句。更換變量名稱對子句集中的某些變量重命名,使任意兩個子句中不消滅一樣的變量名。四、試驗結(jié)果及代碼//化簡子句集的九步法演示//作者:劉少鵬//時間:2022.5#include<iostream>#include<sstream>#include<stack>#include<queue>usingnamespacestd;//一些函數(shù)的定義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);//更換變量名稱//關(guān)心函數(shù)定義boolisAlbum(chartemp);//是字母stringdel_null_bracket(stringtemp);//刪除多余的括號stringdel_blank(stringtemp);//刪除多余的空格voidcheckLegal(stringtemp);//檢查合法性charnumAfectChar(inttemp);//數(shù)字顯示為字符//主函數(shù)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函數(shù))“<<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<<“請輸入您所需要轉(zhuǎn)換的謂詞公式“<<endl;cout<<“需要查看輸入幫助(Y/N)?“<<endl;cin>>commanda;if(commanda==”Y”||commanda==”y”)cout<<“本例程規(guī)定輸入時蘊涵符號為>,全稱量詞為@,存在量詞為#,“<<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變?yōu)閪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);//復制到字符數(shù)組中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);//復制到字符數(shù)組中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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 阜陽師范大學《經(jīng)濟數(shù)學二》2021-2022學年第一學期期末試卷
- 阜陽師范大學《標識設計》2023-2024學年第一學期期末試卷
- 無錫市2024-2025學年五年級上學期11月期中調(diào)研數(shù)學試卷一(有答案)
- 福建師范大學協(xié)和學院《外國文學》2022-2023學年第一學期期末試卷
- 福建師范大學《西方音樂史》2023-2024學年第一學期期末試卷
- 福建師范大學《人文地理學原理與方法》2023-2024學年第一學期期末試卷
- 福建師范大學《教育學(含教師職業(yè)道德)》2023-2024學年第一學期期末試卷
- 福建師范大學《化工基礎》2022-2023學年第一學期期末試卷
- 福建師范大學《歌曲分析與寫作》2023-2024學年第一學期期末試卷
- 第12章 醫(yī)學節(jié)肢動物課件
- 預制梁場成本分析
- 《Monsters 怪獸》中英對照歌詞
- 華東地區(qū)SMT公司信息
- 物業(yè)管理公司法律顧問服務方案
- 拌合站粉罐基礎驗算(共11頁)
- 自動售貨機投放協(xié)議(模板)
- 簽證用完整戶口本英文翻譯模板
- 初三數(shù)學第一單元測試卷(共4頁)
- 甘肅省公路路產(chǎn)損壞賠償收費標準
- 骨折病人傷肢腫脹的護理
- 復習酒水投標書
評論
0/150
提交評論