《動(dòng)物識(shí)別專家系統(tǒng)實(shí)驗(yàn)報(bào)告.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《動(dòng)物識(shí)別專家系統(tǒng)實(shí)驗(yàn)報(bào)告.doc(5頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、人工智能實(shí)驗(yàn)報(bào)告學(xué)號(hào)XXXXX姓名XXXXX實(shí)驗(yàn)名稱動(dòng)物識(shí)別專家系統(tǒng)實(shí)驗(yàn)?zāi)康?本實(shí)驗(yàn)的主要目的是熟練使用推理方法,進(jìn)行編程完成相應(yīng)的功能。本次試驗(yàn)的預(yù)期功能是在系統(tǒng)可以像使用者提出問題,然后系統(tǒng)根據(jù)該問題的回答來篩選出相應(yīng)的動(dòng)物并確定下一個(gè)問題。其中下一個(gè)問題的提出是在盡量減少提問次數(shù)的前提下找到的。同時(shí)該系統(tǒng)還具有增加記錄的功能,可以增加包含的動(dòng)物種類。實(shí)驗(yàn)方案首先系統(tǒng)中包含了若干動(dòng)物種類,例如獅子,老虎等。由于每一種動(dòng)物都有不同的屬性,而根據(jù)這些屬性就可以確定是哪一種動(dòng)物。所以我們要有數(shù)據(jù)結(jié)構(gòu)可以存儲(chǔ)動(dòng)物以及動(dòng)物的不同屬性。為了節(jié)約空間,我們將各個(gè)屬性用一個(gè)數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)起來。這里我用的是數(shù)
2、組進(jìn)行存儲(chǔ),每一個(gè)記錄代表了一種屬性。而動(dòng)物則用結(jié)構(gòu)體存儲(chǔ),如下。typedef struct animint flag30;string nam;anim;該結(jié)構(gòu)體中包括了動(dòng)物的名稱以及屬性數(shù)組。對(duì)應(yīng)的flagi=1,則對(duì)應(yīng)的第i個(gè)屬性是滿足的,反之該動(dòng)物沒有該屬性。這樣就可以得到不同動(dòng)物的屬性。 在提問的時(shí)候根據(jù)該問題的編號(hào),找到存在該屬性的動(dòng)物并且進(jìn)行標(biāo)記。并且在剩余的動(dòng)物中,對(duì)沒有提問的各個(gè)屬性進(jìn)行判斷,找到盡可能能把這些動(dòng)物平分成兩部分的問題進(jìn)行提問。如此就可以找到想要的動(dòng)物。 同時(shí)如果猜測(cè)不正確可以添加新的動(dòng)物或者屬性,并設(shè)置各個(gè)動(dòng)物的屬性,這樣就可以進(jìn)行學(xué)習(xí),使得系統(tǒng)更加準(zhǔn)確。實(shí)
3、驗(yàn)記錄首先運(yùn)行程序會(huì)出項(xiàng)上圖界面,該界面顯示了當(dāng)前所有的動(dòng)物,并且提出問題,用戶可以根據(jù)問題進(jìn)行選擇,看到自己想要的動(dòng)物。對(duì)于每一個(gè)問題,都只能是真或者是假,因此在后續(xù)增加問題的時(shí)候也要注意。其實(shí)可以有多種情況,但是要進(jìn)行擴(kuò)展,所以本實(shí)驗(yàn)沒有增加該功能。該系統(tǒng)中有不同的問題,根據(jù)問題的提示可以對(duì)現(xiàn)有的動(dòng)物進(jìn)行篩選,并且提出下一個(gè)問題,并使得提問的次數(shù)最少。通過上面可以看出當(dāng)生育方式是胎生的時(shí)候,那么就在哺乳動(dòng)物中進(jìn)行選擇,哺乳動(dòng)物中只有老虎是獨(dú)居的,所以提問的時(shí)候就選擇該問題。這樣提問兩次就可以得出結(jié)論。而當(dāng)生育方式不是胎生的時(shí)候,就只有一個(gè)鳥類,所以可以直接獲得結(jié)論。for(int i=0;
4、ianc;i+)if(ai=1)if(ani.flagcount!=anser) ai=0;代碼分析:在回答一個(gè)問題之后,在剩下的動(dòng)物判斷提問的屬性是否滿足,如果滿足,那么就留下;如果不滿足,那么去除。for(int j=0;jtc;j+)for(int i=0;i=0?yes-no:no-yes)0?yes-no:no-yes;yes=0;no=0;代碼分析:上述代碼是對(duì)下一個(gè)問題進(jìn)行選擇的代碼,該部分主要是將剩下的動(dòng)物進(jìn)行判斷,利用二分查找的思想,盡量使下一個(gè)問題回答之后,無(wú)論選什么答案,都使剩下的集合等分。但是由于當(dāng)前系統(tǒng)中的動(dòng)物以及問題過少,因此我們可以向系統(tǒng)中添加新的記錄,以完善該系
5、統(tǒng)。首先在每次提問之后,用戶可以判斷系統(tǒng)回答是否正確,如果不正確,可以手動(dòng)添加記錄以完善該系統(tǒng)。系統(tǒng)會(huì)提示是否增加新的問題,如果添加的話,首先要輸入問題,注意該問題必須的非真即假,不能有第三種情況。然后對(duì)于新增的問題,對(duì)系統(tǒng)中的每一個(gè)動(dòng)物都進(jìn)行初始化,以便于下一次判斷。然后可以增加動(dòng)物的數(shù)目,對(duì)該動(dòng)物的所有屬性都要進(jìn)行設(shè)置,然后該記錄就增加完成了。 如上左所示,在增加了該動(dòng)物之后,我們可以在下次提問的時(shí)候看到系統(tǒng)中的記錄增加,并且可以根據(jù)問題獲得剛剛增加的動(dòng)物。如上右圖所示。實(shí)驗(yàn)總結(jié)本次實(shí)驗(yàn)運(yùn)用了歸結(jié)原理、規(guī)則演繹推理的推理方法,進(jìn)行設(shè)計(jì)。對(duì)于不同的屬性可以有時(shí)間P1,P2Pn。這樣在滿足不同的條件之后就可以進(jìn)行推理,得到所要的動(dòng)物了。通過本次實(shí)驗(yàn),我學(xué)習(xí)到了推理的使用方法,對(duì)于這種問題就的解決也有了理解。這不僅僅讓我學(xué)習(xí)到了如何進(jìn)行推理問題的證明,也讓我對(duì)該系統(tǒng)有了更深的了解。這讓我的編程的能力也有了進(jìn)一步的提高。5