版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、. 人工智能第二次實(shí)驗(yàn)報(bào)告1 實(shí)驗(yàn)題目: 遺傳算法的設(shè)計(jì)與實(shí)現(xiàn)2 實(shí)驗(yàn)?zāi)康模?通過人工智能課程的學(xué)習(xí),熟悉遺傳算法的簡(jiǎn)單應(yīng)用。3 實(shí)驗(yàn)內(nèi)容 用遺傳算法求解f (x) = x2 的最大值,x 0,31,x取整數(shù)??梢钥闯鲈摵瘮?shù)比較簡(jiǎn)單,只要是為了體現(xiàn)遺傳算法的思想,在問題選擇上,選了一個(gè)比較容易實(shí)現(xiàn)的,把主要精力放在遺傳算法的實(shí)現(xiàn),以及核心思想體會(huì)上。4. 實(shí)驗(yàn)過程:1. 實(shí)現(xiàn)過程 (1)編碼使用二進(jìn)制編碼,隨機(jī)產(chǎn)生一個(gè)初始種群。L 表示編碼長度,通常由對(duì)問題的求解精度決定,編碼長度L 越長,可期望的最優(yōu)解的精度也就越高,過大的L 會(huì)增大運(yùn)算量。針對(duì)該問題進(jìn)行了簡(jiǎn)化,因?yàn)轭}設(shè)中x 0,31,所以
2、將二進(jìn)制長度定為5就夠用了;(2)生成初始群體種群規(guī)模表示每一代種群中所含個(gè)體數(shù)目。隨機(jī)產(chǎn)生N個(gè)初始串結(jié)構(gòu)數(shù)據(jù),每個(gè)串結(jié)構(gòu)數(shù)據(jù)成為一個(gè)個(gè)體,N個(gè)個(gè)體組成一個(gè)初始群體,N表示種群規(guī)模的大小。當(dāng)N取值較小時(shí),可提高遺傳算法的運(yùn)算速度,但卻降低種群的多樣性,容易引起遺傳算法早熟,出現(xiàn)假收斂;而N當(dāng)取值較大時(shí),又會(huì)使得遺傳算法效率降低。一般建議的取值范圍是20100。 (3)適應(yīng)度檢測(cè)根據(jù)實(shí)際標(biāo)準(zhǔn)計(jì)算個(gè)體的適應(yīng)度,評(píng)判個(gè)體的優(yōu)劣,即該個(gè)體所代表的可行解的優(yōu)劣。本例中適應(yīng)度即為所求的目標(biāo)函數(shù);(4)選擇從當(dāng)前群體中選擇優(yōu)良(適應(yīng)度高的)個(gè)體,使它們有機(jī)會(huì)被選中進(jìn)入下一次迭代過程,舍棄適應(yīng)度低的個(gè)體。本例
3、中采用輪盤賭的選擇方法,即個(gè)體被選擇的幾率與其適應(yīng)度值大小成正比; (5)交叉遺傳操作,根據(jù)設(shè)置的交叉概率對(duì)交配池中個(gè)體進(jìn)行基因交叉操作,形成新一代的種群,新一代中間個(gè)體的信息來自父輩個(gè)體,體現(xiàn)了信息交換的原則。交叉概率控制著交叉操作的頻率,由于交叉操作是遺傳算法中產(chǎn)生新個(gè)體的主要方法,所以交叉概率通常應(yīng)取較大值;但若過大的話,又可能破壞群體的優(yōu)良模式。一般取0.4到0.99。 (6)變異隨機(jī)選擇中間群體中的某個(gè)個(gè)體,以變異概率大小改變個(gè)體某位基因的值。變異為產(chǎn)生新個(gè)體提供了機(jī)會(huì)。變異概率也是影響新個(gè)體產(chǎn)生的一個(gè)因素,變異概率小,產(chǎn)生新個(gè)體少;變異概率太大,又會(huì)使遺傳算法變成隨機(jī)搜索。一般取變
4、異概率為0.00010.1。 (7)結(jié)束條件當(dāng)?shù)玫降慕獯笥诘扔?00時(shí),結(jié)束。從而觀看遺傳的效率問題。5. 代碼及結(jié)果:/*遺傳算法設(shè)計(jì)最大值*/ #include #include #include #include #define C 0 /測(cè)試 #define CFLAG 4 /測(cè)試標(biāo)記 #define JIAOCHA_RATE 0.5 /交叉概率一般取0.4到0.99#define BIANYI_RATE 0.09 /變異概率為0.0001-0.1 #define ITER_NUM 1000 /迭代次數(shù) #define POP_NUM 20 /染色體個(gè)數(shù)#define GENE_NUM
5、 5 /基因位數(shù) #define FEXP(x) (x)*(x) /y=x2 typedef unsigned int UINT; /染色體 typedef struct char geneBitGENE_NUM; /基因位 UINT fitValue; /適應(yīng)值 Chromosome; /將二進(jìn)制的基因位轉(zhuǎn)化為十進(jìn)制 UINT toDec(Chromosome pop) UINT i; UINT radix = 1; UINT result = 0; for(i=0; iGENE_NUM; i+) result += (pop.geneBiti-0)*radix; radix *= 2; r
6、eturn result; UINT calcFitValue(UINT x) return FEXP(x); void test(Chromosome *pop) int i; int j; for(i=0; iPOP_NUM; i+) printf(%d: , i+1); for(j=0; j= (int)(BIANYI_RATE*100) #if (C=1) & (CFLAG=4) printf(n種群個(gè)體沒有基因變異n); #endif return ; randCol = rand()%GENE_NUM; / 隨機(jī)產(chǎn)生將要變異的基因位 randRow = rand()%POP_NUM
7、; / 隨機(jī)產(chǎn)生將要變異的染色體位 #if (C=1) & (CFLAG=4) printf(n變異前n); test(pop); printf(n變異的位置為:染色體號(hào)=%d 基因位號(hào)=%dn, randRow+1, randCol); #endif poprandRow.geneBitrandCol = (poprandRow.geneBitrandCol=0) ? 1:0; /1變?yōu)?, 0變?yōu)? poprandRow.fitValue = calcFitValue( toDec(poprandRow) ); #if (C=1) & (CFLAG=4) printf(n變異后n); te
8、st(pop); #endif /創(chuàng)建初始群體 void createPop(Chromosome *pop) UINT i,j; UINT randValue; UINT value; srand(unsigned)time(NULL); for(i=0; iPOP_NUM; i+) for(j=0; jGENE_NUM; j+) randValue = rand()%2; popi.geneBitj = randValue+0; / 將隨機(jī)數(shù)0或1賦給基因 value= toDec(popi); popi.fitValue = calcFitValue(value); #if (C=1)
9、& (CFLAG=1) printf(n隨機(jī)分配的種群如下:n); test(pop); #endif /更新種群 void updatePop(Chromosome *newPop, Chromosome *oldPop) UINT i; for(i=0; i0; i-) for(j=0; j popj.fitValue) tempPop = popj+1; popj+1 = popj; popj = tempPop; /計(jì)算總適應(yīng)值 sumFitValue = 0; for(i=0; iPOP_NUM; i+) sumFitValue += popi.fitValue; aFitValue
10、 = (UINT)(float)sumFitValue/POP_NUM)+0.5); /計(jì)算平均適應(yīng)值 /計(jì)算出每個(gè)群體選擇機(jī)會(huì),群體的概率=群體適應(yīng)值/總適應(yīng)值,平均概率= 平均適應(yīng)值/總適應(yīng)值,群體選擇機(jī)會(huì) = (群體的概率/平均概率) for(i=0; iPOP_NUM; i+) choicei = (float)popi.fitValue/sumFitValue)/(float)aFitValue/sumFitValue); choicei = (float)(int)(choicei*100+0.5)/100.0);/保留到小數(shù)點(diǎn)后2位 /根據(jù)選擇概率來繁殖優(yōu)良個(gè)體,并淘汰較差個(gè)體
11、for(i=0; i= (int)(JIAOCHA_RATE*100) #if (C=1) & (CFLAG=3) printf(n種群沒有進(jìn)行交叉.n); #endif return ; #if (C=1) & (CFLAG=3) printf(n交叉前,種群如下:n); test(pop); printf(n交叉的位置依次為:); #endif /染色體兩兩交叉 for(i=0; iPOP_NUM; i+=2) randPos = (rand()%(GENE_NUM-1)+1); / 產(chǎn)生隨機(jī)交叉點(diǎn),范圍是1到GENE_NUM-1 strncpy(tmpStr, popi.geneBit+
12、randPos, GENE_NUM-randPos); strncpy(popi.geneBit+randPos, popi+1.geneBit+randPos, GENE_NUM-randPos); strncpy(popi+1.geneBit+randPos, tmpStr, GENE_NUM-randPos); #if (C=1) & (CFLAG=3) printf( %d, randPos); #endif / 對(duì)個(gè)體計(jì)算適應(yīng)度 for(i=0; iPOP_NUM; i+) popi.fitValue = calcFitValue(toDec(popi) ); #if (C=1) &
13、 (CFLAG=3) printf(n交叉后,種群如下:n); test(pop); #endif /輸出結(jié)果void result(Chromosome *pop) UINT i; UINT x = 0; UINT maxValue = 0; / 函數(shù)的最大值 for(i=0; i maxValue) maxValue = popi.fitValue; x = toDec(popi); printf(n當(dāng)x=%d時(shí),函數(shù)得到最大值為:%dnn, x, maxValue); int main(int argc, char *argv)int count; /迭代次數(shù) Chromosome curPopPOP_NUM; /初始種群或者當(dāng)前總?cè)?Chromosome nextPopPOP_NUM; /變異后種群 createPop(curPop); for(count=1; count(ITER_NUM+1); count+) updatePop(curPop, nextPop); / 更新種群 select(nextPop); /選擇 cross(nextPop); /交叉 mutation(nextPop); /變異 updateP
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職醫(yī)療器械維護(hù)與管理(醫(yī)療器械法規(guī)基礎(chǔ))試題及答案
- 2026年畜牧養(yǎng)殖綜合(多品種飼養(yǎng))試題及答案
- 2025年大學(xué)大四(財(cái)務(wù)管理)營運(yùn)資金優(yōu)化綜合測(cè)試試題及答案
- 救火安全教育課件
- 貴州省安順市開發(fā)區(qū)2025年八年級(jí)上學(xué)期期末考試物理試題附答案
- 養(yǎng)老院老人生活照顧人員職業(yè)發(fā)展規(guī)劃制度
- 養(yǎng)老院老人健康飲食營養(yǎng)師管理制度
- 2026年嵌入式開發(fā)工程師校招題庫含答案
- 2026年粉末冶金工技能等級(jí)考核要點(diǎn)試題含答案
- 2026年快件處理員職業(yè)技能考點(diǎn)突破練習(xí)題集含答案
- 2025年高考數(shù)學(xué)真題分類匯編專題10 直線與圓及圓錐曲線(全國)(解析版)
- 全媒體矩陣宣傳推廣服務(wù)項(xiàng)目方案投標(biāo)文件(技術(shù)方案)
- 軍人成長成才課件
- 脊柱外科工作匯報(bào)
- 滬教牛津版英語九年級(jí)上學(xué)期英語各單元語法專項(xiàng)
- 熱身運(yùn)動(dòng)課堂課件
- 2025年尾礦綜合利用技術(shù)突破與生態(tài)修復(fù)技術(shù)協(xié)同創(chuàng)新研究
- 指向綜合思維培養(yǎng)的高中地理教學(xué)設(shè)計(jì)研究-以“大氣的運(yùn)動(dòng)”為例
- 評(píng)定與追溯管理制度
- DB13∕T 5091-2019 錳鐵、錳硅、氮化錳鐵和金屬錳 硅、錳和磷含量的測(cè)定 波長色散X射線熒光光譜法(熔鑄玻璃片法)
- 物聯(lián)網(wǎng)技術(shù)應(yīng)用專業(yè)-工程制圖及CAD課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論