版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、人工智能第二次實(shí)驗(yàn)報(bào)告一.實(shí)驗(yàn)題目:遺傳算法的設(shè)計(jì)與實(shí)現(xiàn)二.實(shí)驗(yàn)?zāi)康模和ㄟ^人工智能課程的學(xué)習(xí),熟悉遺傳算法的簡單應(yīng)用。三.實(shí)驗(yàn)內(nèi)容用遺傳算法求解f (x) = x的最大值,xS0,31,x取整數(shù)??梢钥闯鲈摵瘮?shù)比較簡單,只要是為了體現(xiàn)遺傳算法的思想,在問題選擇上,選了一個(gè)比較容易實(shí)現(xiàn)的,把主要精力放在遺傳算法的實(shí)現(xiàn),以及核心思想體會(huì)上。四.實(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)行了簡化,因?yàn)轭}設(shè)中xG0,31,所以將二進(jìn)制長度定為5就夠用了
2、;(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è)體。本例中采用輪盤賭的選擇方法,即個(gè)
3、體被選擇的幾率與其適應(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ī)搜索。一般取變異概率為0.00010.1。(7)結(jié)
4、束條件900時(shí),結(jié)束。從而觀看遺傳的效率問題。五 . 代碼及結(jié)果:/* 遺傳算法設(shè)計(jì)最大值 */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h># define C 0/# define CFLAG 4/# define JIAOCHA_RATE 0.5/# define BIANYI_RATE 0.09/# define ITER_NUM 1000/# define POP_NUM20/# define GENE_NUM5/# define FEX
5、P(x) (x)*(x) /y=xA2typedef unsigned int UINT;/ 染色體typedef struct測(cè)試測(cè)試標(biāo)記交叉概率一般取 0.4 到 0.99變異概率為0.0001-0.1迭代次數(shù)染色體個(gè)數(shù)基因位數(shù)chargeneBitGENE_NUM;/基因位UINTfitValue;/適應(yīng)值Chromosome;/將二進(jìn)制的基因位轉(zhuǎn)化為十進(jìn)制UINTtoDec(Chromosomepop)UINTi;UINTradix=1;UINTresult=0;for(i=0;i<GENE_NUM;i+)result+=(pop.geneBiti-'0')*ra
6、dix;radix*=2;returnresult;UINTcalcFitValue(UINTx)returnFEXP(x);voidtest(Chromosome*pop)inti;intj;for(i=0;i<POP_NUM;i+)printf("%d:",i+1);for(j=0;j<GENE_NUM;j+)printf("%c",popi.geneBitj);printf("%4d",toDec(popi);printf("fixValue=%dn",calcFitValue(toDec(pop
7、i);/變異得到新個(gè)體:隨機(jī)改變基因voidmutation(Chromosome*pop)UINTrandRow,randCol;UINTrandValue;randValue=rand()%100;if(randValue>=(int)(BIANYI_RATE*100)#if(C=1)&&(CFLAG=4)printf("n種群個(gè)體沒有基因變異n");#endifreturn;randCol=rand()%GENE_NUM;/隨機(jī)產(chǎn)生將要變異的基因位randRow=rand()%POP_NUM;/隨機(jī)產(chǎn)生將要變異的染色體位# if(C=1)&
8、;&(CFLAG=4)printf("n變異前n");test(pop);printf("n變異的位置為:染色體號(hào)=%d基因位號(hào)=%dn",randRow+1,randCol);#endifpoprandRow.geneBitrandCol=(poprandRow.geneBitrandCol='0')'1':'0'/1變?yōu)?,0變?yōu)?poprandRow.fitValue=calcFitValue(toDec(poprandRow);# if(C=1)&&(CFLAG=4)prin
9、tf("n變異后n");test(pop);#endif/創(chuàng)建初始群體voidcreatePop(Chromosome*pop)UINTi,j;UINTrandValue;UINTvalue;srand(unsigned)time(NULL);for(i=0;i<POP_NUM;i+)for(j=0;j<GENE_NUM;j+)randValue=rand()%2;popi.geneBitj=randValue+'0'/將隨機(jī)數(shù)0或1賦給基因value=toDec(popi);popi.fitValue=calcFitValue(value);#
10、 if(C=1)&&(CFLAG=1)printf("n隨機(jī)分配的種群如下:n");test(pop);#endif/更新種群voidupdatePop(Chromosome*newPop,Chromosome*oldPop)UINTi;for(i=0;i<POP_NUM;i+)oldPopi=newPopi;/選擇優(yōu)良個(gè)體:根據(jù)適應(yīng)度選擇最優(yōu)解,即最優(yōu)個(gè)體voidselect(Chromosome*pop)UINTi,j;UINTsumFitValue;/總適應(yīng)值UINTaFitValue;/平均適應(yīng)值floatchoicePOP_NUM;/選擇Ch
11、romosometempPop;/交換變量# if(C=1)&&(CFLAG=2)/測(cè)試printf("n沒有選擇前的種群如下:n");test(pop);#endif/根據(jù)個(gè)體適應(yīng)度冒泡降序排序for(i=POP_NUM;i>0;i-)for(j=0;j<(i-1);j+)if(popj+1.fitValue>popj.fitValue)tempPop=popj+1;popj+1=popj;popj=tempPop;/計(jì)算總適應(yīng)值sumFitValue=0;for(i=0;i<POP_NUM;i+)sumFitValue+=popi
12、.fitValue;aFitValue=(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;i<POP_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è)體,并淘
13、汰較差個(gè)體for(i=0;i<POP_NUM;i+)if(int)(choicei+0.55)=0)/如果choicei=0淘汰繁殖一次最優(yōu)的群體popPOP_NUM-1=pop0;# if(C=1)&&(CFLAG=2)printf("n經(jīng)過選擇以后的種群:n");test(pop);#endif/交叉:基因交換voidcross(Chromosome*pop)chartmpStrGENE_NUM=""UINTi;UINTrandPos;UINTrandValue;randValue=rand()%100;if(randValue
14、>=(int)(JIAOCHA_RATE*100)# if(C=1)&&(CFLAG=3)printf("n種群沒有進(jìn)行交叉.n");#endifreturn;#if(C=1)&&(CFLAG=3)printf("n交叉前,種群如下:n");test(pop);printf("n交叉的位置依次為:");#endif/染色體兩兩交叉for(i=0;i<POP_NUM;i+=2)randPos=(rand()%(GENE_NUM-1)+1);/產(chǎn)生隨機(jī)交叉點(diǎn),范圍是1到GENE_NUM-1str
15、ncpy(tmpStr,popi.geneBit+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;i<POP_NUM;i+)popi.fitValue=calcFitValue
16、(toDec(popi);#if(C=1)&&(CFLAG=3)printf("n交叉后,種群如下:n");test(pop);#endif/輸出結(jié)果voidresult(Chromosome*pop)UINTi;函數(shù)的最大值UINTx=0;UINTmaxValue=0;/for(i=0;i<POP_NUM;i+)if(popi.fitValue>maxValue)maxValue=popi.fitValue;x=toDec(popi);printf("n當(dāng)x=%d時(shí),函數(shù)得到最大值為:dnn",x,maxValue);迭代次數(shù) 初始種群或者當(dāng)前總?cè)?變異后種群intmain(intargc,char*argv)intcount;/ChromosomecurPopPOP_NUM;/ChromosomenextPopPOP_NUM;/createPop(curPop);for(count=1;count<(ITER_NUM+1);count+)updatePop(curPop,nextPop);/更新種群select(nextPop);/選
溫馨提示
- 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年安全生產(chǎn)責(zé)任基金抵押合同
- 2025年在線醫(yī)療健康平臺(tái)用戶注冊(cè)協(xié)議
- 2025年保密協(xié)議信息轉(zhuǎn)換書
- 2025年代理渠道合作協(xié)議
- 2025年旅游項(xiàng)目管理標(biāo)準(zhǔn)協(xié)議
- 《英語選修課》課件
- 2024 浙江公務(wù)員考試行測(cè)試題(A 類)
- 2025版美容護(hù)膚中心場(chǎng)地租賃合同范本4篇
- 2025版基礎(chǔ)設(shè)施建設(shè)工程施工合同終止補(bǔ)充協(xié)議2篇
- 買賣墓地合同(2024版)
- 2025年度房地產(chǎn)權(quán)證辦理委托代理合同典范3篇
- 職業(yè)衛(wèi)生培訓(xùn)課件
- 柴油墊資合同模板
- 湖北省五市州2023-2024學(xué)年高一下學(xué)期期末聯(lián)考數(shù)學(xué)試題
- 城市作戰(zhàn)案例研究報(bào)告
- 【正版授權(quán)】 ISO 12803:1997 EN Representative sampling of plutonium nitrate solutions for determination of plutonium concentration
- 道德經(jīng)全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書范文
- 彩票市場(chǎng)銷售計(jì)劃書
- 骨科抗菌藥物應(yīng)用分析報(bào)告
評(píng)論
0/150
提交評(píng)論