2023年人工智能大作業(yè)實驗_第1頁
2023年人工智能大作業(yè)實驗_第2頁
2023年人工智能大作業(yè)實驗_第3頁
2023年人工智能大作業(yè)實驗_第4頁
2023年人工智能大作業(yè)實驗_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

湖南中醫(yī)藥大學本科課程實驗教學大綱

《人工智能》

計算機科學與技術專業(yè)

執(zhí)筆人:丁長松

審定人:***

學院負責人:***

湖南中醫(yī)藥大學教務處

二。一四年三月

一、課程性質(zhì)和教學目的

《人工智能》是計算機專業(yè)本科生的一門專業(yè)必修課,適應于計算機科學

與技術專業(yè)、醫(yī)藥信息工程專業(yè)。本課程是關于人工智能領域的引導性課程,通

過本課程的學習,是使學生了解和掌握人工智能的基本概念、原理和方法,培

養(yǎng)學生在計算機領域中應用人工智能技術提高分析和解決較復雜問題的能力,

啟發(fā)學生對人工智能的愛好,培養(yǎng)知識創(chuàng)新和技術創(chuàng)新能力。

《人工智能》重要研究智能信息解決技術、開發(fā)具有智能特性的各類應用

系統(tǒng)的核心技術。本課程重要介紹人工智能的基本理論、方法和技術,重要涉

及常用的知識表達、邏輯推理和問題求解方法、人工智能發(fā)展學派以及重要理

論。

先修課程:高等數(shù)學、數(shù)據(jù)結構、數(shù)據(jù)庫原理、算法設計與分析、數(shù)理邏輯

二、課程目的

人工智能實驗應在一種為高效率開發(fā)專家系統(tǒng)而設計的高級程序系統(tǒng)或高

級程序設計語言環(huán)境中進行。在目前開來,專家系統(tǒng)開發(fā)工具和環(huán)境可分為5

種重要類型:程序設計語言、知識工程語言、輔助型工具、支持工具及開發(fā)環(huán)

境。在這里重要是規(guī)定學生能用相關術語描述、表達一些問題;用程序設計語言

如:C、C++、JAVA編程來實現(xiàn)一些基本的算法、推理、搜索等過程。

三'實驗內(nèi)容與規(guī)定

實驗一:謂詞表達

【實驗內(nèi)容】

設農(nóng)夫、狼、山羊、白菜都在河的左岸,現(xiàn)在要把它們運送到河的右岸去,

農(nóng)夫有條船,過河時,除農(nóng)夫外船上至多能載狼、山羊、白菜中的一種。狼要吃

山羊,山羊要吃白菜,除非農(nóng)夫在那里。試設計出一個保證所有都能過河的方案。

【實驗目的】

讓學生加深對謂詞邏輯和謂詞知識表達的理解。

【實驗規(guī)定】

寫出所用謂詞的定義,并給出每個謂詞的功能及變量的個體域,然后編程

來實現(xiàn)。

【參考學時】

1.定義狀態(tài)的謂詞

2.定義變元的個體域

3.描述問題的初始和目的狀態(tài)

4.定義動作

5.解釋過程

解:(1)先定義描述狀態(tài)的謂詞

AL(x):x在左岸

rAL(x)表達x在右岸。

(2)定義個體域

x的個體域:{農(nóng)夫,船,狼,羊,白菜}。

(3)定義初始狀態(tài)和目的狀態(tài)

問題的初始狀態(tài):AL(農(nóng)夫),AL(船),AL(狼),AL(羊),AL(白菜),

問題的目的狀態(tài):"L(農(nóng)夫),RL(船),-AL(狼),rAL(羊)「AL(白菜)

(4)定義動作

4個動作:

農(nóng)夫不帶來回

農(nóng)夫帶來回

L-R:農(nóng)夫自己劃船從左岸到右岸

L-R(x):農(nóng)夫帶著x劃船從左岸到右岸

R-L:農(nóng)夫自己劃船從右岸到左岸

R-L(x):農(nóng)夫帶著x劃船從右岸到左岸

x的個體域是{狼,羊,白菜}。

L-R:農(nóng)夫劃船從左岸到右岸

條件:AL(船),AL(農(nóng)夫),rAL(狼)V”L(羊),-AL(羊)VrAL(白菜)

動作:刪除表:AL(船),AL(農(nóng)夫)

添加表:「AL(船),-AL(農(nóng)夫)

L-R(狼):農(nóng)夫帶著狼劃船從左岸到右岸

條件:AL(船),AL(農(nóng)夫),AL(狼),rAL(羊)

動作:刪除表:AL(船),AL(農(nóng)夫),AL(狼)

添加表:ML(船)「AL(農(nóng)夫),血(狼)

L-R(羊):農(nóng)夫帶著羊劃船從左岸到右岸

條件:AL(船),AL(農(nóng)夫),AL(羊),AL(狼),AL(白菜)

或:AL(船),AL(農(nóng)夫),AL(羊),ML(狼)「AL(白菜)

動作:刪除表:AL(船),AL(農(nóng)夫),AL(羊)

添加表:「AL(船),(農(nóng)夫),F(xiàn)L(羊)

L-R(白菜):農(nóng)夫帶著白菜劃船從左岸到右岸

條件:AL(船),AL(農(nóng)夫),AL(白菜),-AL(狼)

動作:刪除表:AL(船),AL(農(nóng)夫),AL(白菜)

添加表「AL(船),rAL(農(nóng)夫),rAL(白菜)

R-L:農(nóng)夫劃船從右岸到左岸

條件:rAL(船),rAL(農(nóng)夫),AL(狼)VAL(羊),AL(羊)VAL(白菜)

或:rAL(船),rAL(農(nóng)夫),rAL(狼)「AL(白菜),AL(羊)

動作:刪除表:rAL(船),-AL(農(nóng)夫)

添加表:AL(船),AL(農(nóng)夫)

R-L(羊):農(nóng)夫帶著羊劃船從右岸到左岸

條件:rAL(船),rAL(農(nóng)夫),rAL(羊),rAL(狼)JAL(羊),AL(白菜)

動作:刪除表:rAL(船),rAL(農(nóng)夫),rAL(羊)

添加表:AL(船),AL(農(nóng)夫),AL(羊)

(3)問題求解過程

AL(農(nóng)夫A1

AL(狼)。AL(農(nóng)夫WAL舊菜A

AL(船戶L-R(羊*AL(白菜).,R-L〃AL(船)"L-R(狼W-AL(農(nóng)R.L(羊)

ALQ艮尸,f-AIX農(nóng)「oAL(狼)"t=>夫>---->

AL(羊W

夫戶AL(白菜WrAL(船A

AL舊菜)“

、AL(船》rAL佯州rAL(狼)“

L(農(nóng)夫),

A?AL佯AAL(農(nóng)夫”--?AIZ農(nóng)

AL(船)川L-R(白菜)「山(農(nóng)R-L"AL(船AL-R(羊)p%僅

AY,?、1-----------------r,二夫)川

AM干尸天A>AL(羊”

AL(白菜V■'AI/白

3(船),■*AL(羊A

血(狼)“(白菜),

rALrAL(白

代碼如下

#inc1ude<stdio.h>

#include<malloc.h>

typedefintdatatype;//datatype定義

structseqque//隊列結構體

1ntmaxnum;

intf,r;。?!ù娣蓬^尾下標

datatype*q;

);

typedefstructseqque*pseqque;

/*創(chuàng)建一個新的隊列*/

pseqquecreatemptyqueue(intm)

(

pseqquepaqu=(pseqque)malloc(sizeof(structseqque));?!ㄉ暾埥Y構體動

態(tài)空間

oif(paqu!=NULL)

。(

?paqu->q=(datatype*)ma1loc(sizeof(datatype)*m);〃申請datatype動態(tài)空

Mf(paqu->q)

(

paqu->maxnum=m;

a叩aqu->f=O;〃置頭下標為0

。。paqu->r=O;“/置尾下標為0

。returnpaqu;

00J

elsefree(paqu);

°)

printf("超過存儲空間!”);

returnNULL;

)

/*入隊運算函數(shù)*/

voidenque(pseqquepaqu,datatypex)

if((paqu->r+1)%(paqu->maxnum)==paqu->f)

Printf("隊列已滿!”);

oelse

°{

epaqu->q[paqu->r]=x;

paqu->r=(paqu->r+l)%(paqu->maxnum);

°}

)

/*出隊運算函數(shù)*/

voiddeque(pseqquepaqu)

(

?if(paqu—>f==paqu—>r)

Printf("空隊列!");

?else

。paqu->f=(paqu->f+1)%(paqu->maxnum);

)

/*取隊列頭元素*/

datatypefrontque(pseqquepaqu)

(

Af(paqu->f==paqu->r)

printf("隊列為空!");

?e1se

?return(paqu—>q[paqu->f]);

)

/*判斷是否為空隊列函數(shù)*/

intisemptyque(pseqquepaqu)

。if(paqu->f==paqu->r)

ooreturn1;

oelse

return0;

)

/*判斷農(nóng)夫位置*/

intfarmer(int1ocation)

(

return(0!=(location&0x08));

)

/*判斷狼位置*/

intwo1f(int1ocation)

(

?return(0!=(location&0x04));

)

/*判斷白菜位置*/

intcabbage(intlocation)

(

return(0!=(location&0x02));

)

/*判斷羊位置*/

intgoat(int1ocation)

?return(0!=(location&0x01));

)

/*安全狀態(tài)的判斷函數(shù)*/

intsafe(int1ocation)

(

?f((goat(1ocation)==cabbage(location))&&(goat(location)!=farmer(locati

on)))

oreturn0產(chǎn)〃羊吃白菜

if((goat(location)==wolf(1ocation))&&(wolf(location)!=farmer(loca

tion)))

好eturn0;?!?狼吃羊

return1;

)

/*解決農(nóng)夫問題函數(shù)*/

voidfarmerprob1em(void)

(

inti,movers,location,newlocation;

“ntroutel!6];〃記錄已走過的環(huán)節(jié)

pseqquemoveto;g〃存放安全的環(huán)節(jié)

0moveto二ereatemptyqueue(16);。//創(chuàng)建新隊列

oenque(moveto,0x00);。//置狀態(tài)初值

for(i=0;i<l6;i++)。//置已走過環(huán)節(jié)初值

8route[i]=-l;

route[0]=0;

owhile(!isemptyque(moveto)&&(route[15]==-1))

o?1ocation=frontque(moveto);//取頭狀態(tài)為當前狀態(tài)

。deque(moveto);6//刪除隊列頭狀態(tài)

for(movers=1;movers<=8;movers<<=1)〃依次考慮羊、白菜、狼、

農(nóng)夫的移動

((0!=(location&0x08))==(0!=(1ocation&movers)))?!ㄅ袛嗍欠窈娃r(nóng)夫同

Ob{

e“new1ocation=locationA(0xO8|movers);?!?移動后的狀態(tài)

*if(safe(newlocation)&&(route[new1ocation]==-1))?!ㄅ袛嗍欠駷榘踩珷?/p>

態(tài)

0{

。。。好oute[newlocation]=location;。”/將新的安全狀態(tài)賦給1ocation

goenque(moveto,new1ocation);。〃新的狀態(tài)入隊列

6}

。}

if(route[15]!=-1)?//到達最終狀態(tài)

(

。printf("過程是:\n");。//輸出過程和位置

for(location=15;location>=0;location=routeElocation])

00|

oprintf("位置是:%d\n",location);

。?>if(location==0)

一xit(0);

)

oelseprintf("此問題無解!”);

/*主函數(shù)*/

voidmain()

(

ofarmerprob1em();

實驗二:一個用于動物辨認的產(chǎn)生式系統(tǒng)

【實驗內(nèi)容】

設計該系統(tǒng),讓其實現(xiàn)可以辨認老虎、金錢豹、斑馬、長頸鹿、企鵝、信天

翁這6種動物。

【實驗目的】

讓學生進一步加深對產(chǎn)生式系統(tǒng)的結識和理解。

【實驗規(guī)定】

其規(guī)則庫中應包含至少15條規(guī)則,假設推理開始時綜合數(shù)據(jù)庫中存放有以

下事實:

動物有暗斑,有長脖子,有長腿,有奶,有蹄。

【參考學時】

6課時:上機實驗6課時。

設計如下:

(1)IDENTIFIER產(chǎn)生式規(guī)則

規(guī)則11:假如該動物有毛發(fā)

那么它是哺乳動物

規(guī)則12:假如。該動物有奶

那么它是哺乳動物

規(guī)則I3:假如該動物有羽毛

那么它是鳥類動物

規(guī)則14:假如該動物能生蛋

它能飛行

那么它是鳥類動物

給出的六種動物除了哺乳動物即是鳥類動物,故11-14這一組規(guī)則可用于

區(qū)分這兩類動物。

規(guī)則I5:假如。該動物是哺乳動物

它吃肉

那么它是肉食動物

規(guī)則16:假如該動物是哺乳動物

它長有爪子

它長有利齒

它眼睛前視

那么。它是肉食動物

規(guī)則I7:假如該動物是哺乳動物

它長有蹄

那么。它是有蹄動物

規(guī)則瓜假如該動物是哺乳動物

它反芻

那么。它是有蹄動物,并且是偶蹄動物

I5-I8用于區(qū)分哺乳動物中的食肉動物和有蹄動物。

規(guī)則I9:假如。該動物是食肉動物

它有暗斑

那么它是金錢豹

規(guī)則H0:假如該動物是食肉動物

它沒有暗斑

它有黃色條紋

那么它是老虎

19—110用于區(qū)分肉食動物。

規(guī)則Ill:假如。該動物是有蹄動物

它有長脖子

那么。它是長頸鹿

規(guī)則112:假如。該動物是有蹄動物

它沒有長脖子

它有黑白條紋

那么。它是斑馬

I11-H2用于區(qū)分蹄型動物。

規(guī)則II3:假如該動物是鳥類

它有能游水

那么他是會水鳥類

規(guī)則114:假如。該動物是鳥類

它有長腿

它會飛

那么它是信天翁

規(guī)則115:假如該動物是會水鳥類

它不會飛

它是黑色和白色的

那么它是信企鵝

113-115用于區(qū)分鳥類動物。

代碼如下:

#include<stdio.h>

#include<std1ib.h>

intmain()

(

?inta[5]={0,0,0,0,0};

printf("請輸入該動物的特性有的特性輸入1無的特性輸入0\n\n");

for(intk=0;k<5;k++)

°{

gif(k==0)

。printf("該動物是否有奶?\n");

oelseif(k==l)

。printf("該動物是否有蹄?\n");

“elseif(k==2)

。printf("該動物是否有長腿?'n");

。。eIseif(k==3)

printf("該動物是否有暗斑?\n");

e1seif(k==4)

。。printf("該動物是否有長脖子?\n");

。scanf("%d",&a[k]);

。}

0

Trintf("輸入的序列為:");

for(intj=O;j<5;j++)

(

printf("%d",a[j]);

叩rintf(

?intb=-l;

for(inti=0;i<5;i++)

(

oif(i==0){

。oif(a[i]==1){

pintf("該動物是哺乳動物\n");

8b=1;

Ob}

。oif(a[i]==o){

甲rintf("該動物不是哺乳動物\n");

。ob=0;

00}

}

if(i==l){

08if(a[i]==1&&b==1){

。printf("該動物是有蹄動物\n”);

ob=ll;

00}

8“f(a[i]==0&&b==1){

?printf(n該動物不是有蹄動物\n”);

。。ob=l0;

0bj

°}

sif(i==2){

°if(a[i]==1&&b==0){

ggprintf("該動物有長腿\n");

。b=01,信天翁

)

8,if(a[i]==0&&b==0){

。"rintf("該動物沒有長腿\n");

。?b=00;//企鵝

°}

}

。if(i==3){

°if(a[i]==l&&b==10){

?printf("該動物有暗斑\n");

°,b=l()1;〃獵豹

666}

。if(a[i]==0&&b==10){

sprintf("該動物無暗斑\nn");

"gb=100;〃老虎

00J

60)

8if(i==4){

。?if(a[i]==l&&b==l1){

“叩rintf("該動物有長脖子\n”);

o由二111;〃長頸鹿

0)

。。if(a[i]==O&&b==11){

“printf("該動物沒有長脖子\n)

。8b=110;//斑馬

)

。}

}

?if(b==01)

。Printf("該動物是信天翁\n”);

?elseif(b==00)

-printf("該動物是企鵝\n)

?elseif(b==101)

。叩rintf("該動物是獵豹\n“);

?elseif(b==l00)

“printf("該動物是老虎\n");

elseif(b==111)

Printf("該動物是長頸鹿\n");

elseif(b==110)

“printf("該動物是斑馬\n)

else

叩rintf("該動物不存在\n”);

system(npauseM);

return0;

}

實驗三:子句消解

代碼如下

#include<stdio.h>

#inc1ude<iostream.h>

#inc1ude<string.h>

#inc1ude<std1ib.h>

#defineN50

#defineM50

voidReplaceString(char*Src,char*a,char*b)

(

char*ptr;

int1en=str1en(Src);

ptr=(char*)ma11oc(sizeof(char)*1en+10);

strcpy(ptr,Src);

intsubLen_a=strlen(a);

ointsubLen_b=str1en(b);

ointj;intk=subLen_b-subLen_a;

for(inti=0;i<len;i++)

(

0

。時f(O==strncmp(&ptr[i],a,subLen—a))

00

00for(j=i+subLen—a;j<len;j++)

。?ptr[j+k]=ptr[j];

。。。strncpy(&ptr[i],b,subLen_b);

1

)

ptr[len+k]='\0';

strepy(Src,ptr);

)

voidxiaojie(charaE],charblJ)

(

?charA[NJ[NJ,B[N][N];

intn=0,m=0,i,j;

?intlenth_a=strIen(a),lenth_b=strlen(b);

?for(i=0;i<lenth_a;i++)

°(

if(a[i]!='V)

00I

A[n][m]=a[i];

6m++;

)

else

6{

o^A[n][m]='\0';

m=0;

00n++;

A[n][m]='\O,;

ointk=n;//A的記錄行數(shù)

n=0,m=0;

ofor(i=0;i<1enth_b;i++)

{

oif(b[i]!=Y)

°{

]=b[i];

3m++;

^else

6(

oB[n][mJ^XO';

m=0;

n++;。

。}

B[n][m]='\0,;

。intr=n;//B的記錄行數(shù)

0

。//檢查兩子句是否具有互補對

for(n=0;n<=k;n++)

(

。for(m=0;m<=r;m++)

?o?if((B[m][0]=='~,)&&(B[m][1]==A[n]⑼))//出現(xiàn)互補對

00I

//置換

。charx[N][N],y[N][N];

intg=0,h=0;

。lenth_a=str1en(A[n]);

?1enth_b=strien(B[m]);

。for(i=2;i<1enth_a-1;i++)

aa(

if(A[n][i]!=';)

。x[g][h]=A[n]Li];

soeh++;

)

else

00|

8ox[g][h]-\0*;

ooooh=0;

og++;

}

?}

-x[g][h]='\0,;

8g=0,h=0;

“for(i=3;i<lenth_b-1;i++)

|

f(B[n][i]!=;)

8gy[g][h]=B[n][i];

。由++;

b)

o1se

00I

。y[g][h]='\o';

。h=0;

og++;

08)

00)

'y[g][h]='\0';

,for(inti=0;i<=g;i++)//置換

0{

if(strlen(x[i])>=strlen(y[i]))

°{

606C0ut?x[i]v<”/"《y[i]?endl;

。。for(j=0;j<=r;j++)

???Rep1aceString(B[j],y[i],x[i]);

d0I

8if(strlen(x[i])<str1en(y[i]))

(

8。cOUt?y[i]?,7,'?x[i]?endl;

a。。for(j=0;j〈=k;j++)

?Rep1aceString(A[j],x[i],y[i]);

)

000

1()

for(i=n;i<=k;i++)//消去互補對

strcpy(A[i],A[i+l]);

“k=k-1;

for(i=m;i<=r;i++)

strcpy(B[i],B[i+1]);

oor=r-1;

)

e1seif((A[n][0]=~)&&(A[n][l]==B[m][0]))

°{

■charx[N][N],y[N][N];

intg=0,h=0;

31enth_a=strlen(A[n]);

g1enth_b=strlen(B[m]);

for(i=3;i<lenth—a;i++)

。{

。if(A[n][i]!=7)

{

°x[g][h]=A[n][i];

a0h++;

b°}

。else

(

。?X[g][h]=,\0';

OOoh=0;

g++;

。}

Obb}

x[g][h]=z\0';

gg=0,h=0;

。gfor(i=2;i<1enth_b;i++)

DObb{

oooooif(B[n][“!=?)

00b(

0000y[g]Eh]=B[n][i];

obeh++;

。}

。b?>else

0000{

。y[g][h]=,\cr;

。。h=0;

008Q++?

"y[g][h]='\0';

OD

。for(i=0;i<=g;i++)〃置換

if(strlen(x[i])>=strlen(y[i]))

000I

爾out?x[i]?Vn?y[i]?end1;

0000for(j=O;jv=r;j++)

Rep1aceString(B[j],y[i],x[i]);

}

。。if(strlen(x[i])<strlen(y[i]))

g“coutV<”&&&&**?endl;

。。。cout?y[i]<<7"?xEi]?end1;

。。。for(j=0;j<=k;j++)

g?ReplaceString(A[j],xLi],y[i]);

000}

80for(i=n;i<=k;i++)//消去互補對

。8strcpy(A[i],A[i+1]);

。k=k-l;

。匕for(i=m;i<=r;i++)

gostrcpy(B[i],B[i+11);

gr=r-l;

Odd}

gge1secontinue;

00}

。}

?!ㄝ敵鼋Y果

。,cout?"消解后的字句為:"<<endl;

。for(n=0;n<=k;n++)

ocout?A[n]?,,Vn;

for(m=0;m<r;m++)

ooocout?B[m]?nVu;

。?cout<<B[m]?endl;

voidmain()

chara[N],b[N];

coUtv<”請輸入所要消解的第一個子句:"<<endl;

cin?a;

cout<<”請輸入所要消解的第二個子句:endl;

ocin>>b;

xiaojie(a,b);

運營結果:

?D:\學習軟件\MSDev98\MyPrqjects\子句消魁De…W2—T

請輸入所要消解的第一個子句:

P[x,f(y)]VQ(x)VR(f(a),y)

請輸入所要消解的第二個子句:

^P[f(f(a)),z]VR(z,w)

f(f(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論