




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
利用遺傳算法求解函數(shù)最大值題目利用遺傳算法求解函數(shù)f(x,y)=x*sin(6*y)+y*cos(8*x)在xg[1,2]及ye[1,2]的最大值。解答算法利用遺傳算法進(jìn)行求解,篇末所附源代碼中帶有算法的詳細(xì)注釋。算法中涉及不同的參數(shù),參數(shù)的取值需要依如實(shí)際情形進(jìn)行設(shè)定,下面運(yùn)行時(shí)將給出不同參數(shù)的結(jié)果對(duì)照。//遺傳■算法關(guān)鍵密constintN="科駢的個(gè)怵戳constintlen=30-;//每個(gè)亍體的染色tfc的氏度」沛滑占一半constintcrossnum=4-//乍時(shí)箋的^^點(diǎn)constintnaxGeneration=//最尢曲七代數(shù)constdoubleprobCross=&5;//交叉概率constdoubleprobMutation=?.15j//變異概率概念整體算法的終止條件為,當(dāng)種群進(jìn)化次數(shù)達(dá)到maxGeneration時(shí)停止,現(xiàn)在種群中的最優(yōu)解即作為算法的最終輸出?!翱刂频拇舊or(intg=&jg<ma)cGeneration;g++)設(shè)種群規(guī)模為N,第一是隨機(jī)產(chǎn)生N個(gè)個(gè)體,實(shí)驗(yàn)中概念了類型Chromosome表示一個(gè)個(gè)體,而且在默許構(gòu)造函數(shù)中即進(jìn)行了隨機(jī)的操作。
H初始伽群fcr(Lnti=i<M.;i+f)groupfi]=匚hromso-me;然后程序進(jìn)行假設(shè)干次的迭代,在每次迭代進(jìn)程中,進(jìn)行選擇、交叉及變異三個(gè)操作。選擇操作第一計(jì)算當(dāng)前每一個(gè)個(gè)體的適應(yīng)度函數(shù)值,那個(gè)地址的適應(yīng)度函數(shù)即為所要求的優(yōu)化函數(shù),然后歸一化求得每一個(gè)個(gè)體選中的概率,然后用輪盤賭的方式以許諾重復(fù)的方式選擇選擇N個(gè)個(gè)體,即為選擇以后的群體。//選擇操任□void?亡lect//選擇操任□void?亡lectf匚hromowom亡grcup^msn]){//計(jì)亙每個(gè)個(gè)詭的辭讎d'oublefitn-essVal^mKn]sfor(inti=0;id'oublesum=0;for(inti=0;id'oublepro-b[inKn];for(inti=0ji//intselectld[mxn]jfor(inti=1;i<M;i+4)for(inti=0ji<M;i+4)<MJi+4)fitnessVal[i]=fitness(group[i];sum+=fitnessValfi]jprob[i]=fitneesVal[i]/sum;prob[i]4-=prob[i-l];rsndNum=r3ndom&l();rsndNum=r3ndom&l();刊「(jif(if(randMum<prob[j])selectld[i]=j:breakjif(j==N-1)selectld[l]=jj打把種詳更新為新舞的個(gè)濮合f^r(inti=0ji<Nji+十)temGroup[1]=訂oup[i]if^r(inti=0ji<Nii+十)graup[i]=tei?5r0up[^electld[i]];但實(shí)驗(yàn)時(shí)發(fā)覺(jué)結(jié)果不行,通過(guò)認(rèn)真研究以后發(fā)覺(jué),那個(gè)地址在x、y取某些值的時(shí)候目標(biāo)函數(shù)計(jì)算出來(lái)的適應(yīng)值可能會(huì)顯現(xiàn)負(fù)值,這時(shí)若是依照把每一個(gè)個(gè)體的適應(yīng)值除以適應(yīng)值的總和的進(jìn)行歸一化的話會(huì)顯現(xiàn)問(wèn)題,因?yàn)閭€(gè)體可能顯現(xiàn)負(fù)值,總和也可能顯現(xiàn)負(fù)值,若是歸一化的時(shí)候除以了一個(gè)負(fù)值,選擇時(shí)就會(huì)選擇一些不良的個(gè)體,對(duì)實(shí)驗(yàn)結(jié)果造成阻礙。對(duì)于那個(gè)問(wèn)題,我把適應(yīng)度函數(shù)定為目標(biāo)函數(shù)的函數(shù)值加一個(gè)正數(shù),保證取得的適應(yīng)值為正數(shù),然后再進(jìn)行一樣的歸一化和選擇的操作。實(shí)驗(yàn)結(jié)果說(shuō)明,之前的實(shí)驗(yàn)結(jié)果很不穩(wěn)固,修正后的結(jié)果比較穩(wěn)固,趨于最大值。H適應(yīng)度函數(shù),為避免負(fù)值,把目標(biāo)函數(shù)加Y正數(shù)□doublefitnessfconst匚hro[nciso?ne&c)doubleKjyjdecodeXjy)treturnf(Kjy)十5j交叉操作第一是依照交叉概率probCross選擇要交叉的個(gè)體進(jìn)行交叉。H根據(jù)交叉醉進(jìn)行交叉for(int1=0,pre=-1;i<N;i+4-J{if(random01()<probCross)if(pre==-1)pre=i;elsecrossiover(group[pr亡]"呂roup[i]);pre=-1;那個(gè)地址依照交叉參數(shù)crossnum進(jìn)行多點(diǎn)交叉,第一隨機(jī)生成交叉點(diǎn)位置,許諾交叉點(diǎn)重合,兩個(gè)重合的交叉點(diǎn)成效相互抵消,相當(dāng)于沒(méi)有交叉點(diǎn),然后依照交叉點(diǎn)進(jìn)行交叉操作,取得新的個(gè)體。-Jvoidtr05so¥er(Chromo5OTie&clj匸hromosom亡&c2)£/;生成交艮■點(diǎn)位置,齊排京int匸「O'EspointtniKn];fcr(inti=0;i<croEsnum;i++)trosspoint[i]=rand(")%len;mort(crciTspoirrt』tr□sspoint+crosEnum);//聞蟻boclflag=Q-fcr(inti=j=創(chuàng)iclen^i4-4-)(ifCIflag)swap(d.g[i]Jc2.g[i]j3(i==crasspoint[j])H如果若千。交臭點(diǎn)重合「則效果疊加//催數(shù)個(gè)交叉點(diǎn)效杲相當(dāng)于沒(méi)有交夏點(diǎn)while(j<croEsnumMi==crosspoint[j]j++j-flag=I'flaSi變異操作第一是依照變異概率probMutation選擇要變異的個(gè)體。JJ根據(jù)變異髒進(jìn)行孌異far(inti=0_;i€井+)if(random01()<probMutati/Mi)mutate(groLip[i])3變異時(shí)先隨機(jī)生成變異的位置,然后把改位的01值翻轉(zhuǎn)。H變異操作-3voidmutate(Chronoso-meAu){//隨機(jī)選擇T鍛行翻轉(zhuǎn)inti=randQSlenj(=-g[i]=!c.g[i]3通過(guò)必然的進(jìn)化以后取得最終種群,從中選擇最優(yōu)的個(gè)體即可取得最終的結(jié)果。//荻取種群最刖休mintgetOptimal(thromsomegroup[mxnjjdoub-1亡呂Kjdoiuble&doublesval)£/;計(jì)算適應(yīng)值.遍歷彳導(dǎo)到最優(yōu)值井進(jìn)行解碼doublefitnessyalfmKnJif^r(inti=0;i<Nji4-4)fitnessVal[i]=fitness(mp[i]);iritid=for(inti=1;i<Nji-l-l-)if(fitnessVal[i]>fItnessVal[id])id=i;decode(group[id]jKj>);val=f(Kjy);returni.d;運(yùn)行結(jié)果借助matlab軟件,咱們能夠明白該函數(shù)在該概念域下的圖像為:420211-421.21.81.5借助matlab軟件,咱們能夠明白該函數(shù)在該概念域下的圖像為:420211-421.21.81.51.6y)=x*sin(E*y)+fcos(B^)的團(tuán)像-2<以下設(shè)置不同的參數(shù)值進(jìn)行對(duì)如實(shí)驗(yàn):表1不同參數(shù)的對(duì)如實(shí)驗(yàn)NlencrossnummaxGenerationprobCrossprobMutate實(shí)驗(yàn)一實(shí)驗(yàn)二11010410000.850.152.614332042.74697117
25010450000.850.152.871765122.88383150320020450000.850.152.892027452.893073594200304100000.850.152.894406562.888525515200305100000.80.22.888068212.8916507363004041000000.850.152.893637392.89445359以上咱們要緊對(duì)種群規(guī)模N,個(gè)體染色體長(zhǎng)度len,迭代次數(shù)maxGeneration進(jìn)行比較。能夠看出,隨著種群規(guī)模的增大,染色體長(zhǎng)度的增加,迭代次數(shù)的增加,算法取得的結(jié)果愈來(lái)愈精準(zhǔn)。當(dāng)參數(shù)規(guī)模達(dá)到必然程度時(shí),再增加參數(shù)的值會(huì)明顯地增加程序運(yùn)行時(shí)刻,但卻不必然能明顯改善解的質(zhì)量,反而可能因?yàn)橐恍╇S機(jī)因數(shù)而產(chǎn)生質(zhì)量更差的解,如第6組實(shí)驗(yàn)一所示。同時(shí)也可能比較了一下多點(diǎn)交叉的交叉點(diǎn)個(gè)數(shù)crossnum,交叉概率probCross,變異概率probMutate等參數(shù),由于參數(shù)太多,那個(gè)地址沒(méi)有一一進(jìn)行操縱變量的比較。大致估算可知,交叉概率及交叉點(diǎn)的個(gè)數(shù)阻礙交叉操作產(chǎn)生新個(gè)體的質(zhì)量,過(guò)量的交叉及轉(zhuǎn)變過(guò)大的交叉可能會(huì)產(chǎn)生不行的結(jié)果,而過(guò)量的變異也應(yīng)該會(huì)造成算法的不穩(wěn)固。下面給出以上幾個(gè)實(shí)驗(yàn)結(jié)果的實(shí)驗(yàn)截圖,其中到此刻為止結(jié)果最好的一個(gè)為:融C:\Windowsstem32\cmd.e^e-58203125,1.327026=2.89445359Fpessan^keytocontinue...其余假設(shè)干個(gè)為:算法改良以上實(shí)驗(yàn)取得的最好結(jié)果仍然是差強(qiáng)人意,那個(gè)地址對(duì)算法做一個(gè)小的優(yōu)化,即添加避免種群退化的操作。記錄當(dāng)前位置所取得的最優(yōu)值及對(duì)應(yīng)的個(gè)體,每次更新種群以后,計(jì)算新種群的最優(yōu)值,若是最優(yōu)值變差了,那么把之前較優(yōu)的個(gè)體替換進(jìn)新種群,避免種群退化;不然更新最優(yōu)值。//防止^11牝doubl亡teiwal;intbestId=getGptimal(group,k』.±temval);if(t&mval<bestval){//如果新利翳的最優(yōu)値査差.把較尤的們i直新禍group[beEtld]=beet匚;else{//如果新利辭的最優(yōu)值M.則更新毘優(yōu)值記錄best<=groLipfbestld]jbestval=temvalj改良以后的成效如下所示,顯然比之前更優(yōu),且實(shí)驗(yàn)結(jié)果顯示關(guān)于前面對(duì)如實(shí)驗(yàn)中的參數(shù)值,那個(gè)地址只需要較小的參數(shù)(如迭代次數(shù)只需2000次)值即可穩(wěn)固收斂到此最大值,可知改良超級(jí)有效。[SIC!\Windows\system32\cmd.exe81數(shù)在點(diǎn)"-5眈5195茶1-眈65075R取得最大値2旳44ZL眄Pressanykeytocontinue???.增加輸出精度以后為,于是取得最優(yōu)的結(jié)果為2.894471354862841SBC:\WindowsXsystem32\匚md.exei■=■ir^[函婁文在點(diǎn)Cl?582519531250000,1,326507568359375>|SIPressanykeytocontinue.??.^<:2.894471354862841源代碼改良后的源代碼如下#include<iostream>#include<iomanip>#include〈algorithm>#include<cmath>#include<ctime>usingnamespacestd;//程序欲分派內(nèi)存的數(shù)組大小constintmxn=10000;//最大的種群規(guī)模constintmxlen=1000;//最大的染色體長(zhǎng)度//遺傳算法關(guān)鍵參數(shù)constintN=200;//種群的個(gè)體數(shù)constintlen=30;//每一個(gè)個(gè)體的染色體的長(zhǎng)度,x和y各占一半constintcrossnum=4;//交叉操作時(shí)多點(diǎn)交叉的交叉點(diǎn)個(gè)數(shù)constintmaxGeneration=2000;//最大進(jìn)化代數(shù)constdoubleprobCross=0.85;//交叉概率constdoubleprobMutation=0.15;//變異概率//個(gè)體的染色體類classChromosome{public:boolg[mxlen];//二進(jìn)制編碼的編碼數(shù)組Chromosome。//默許構(gòu)造函數(shù),構(gòu)造隨機(jī)染色體{for(inti=0;i<len;i++)g[i]=rand()%2;}Chromosome(constChromosome&c)//拷貝構(gòu)造函數(shù),進(jìn)行深復(fù)制{for(inti=0;i<len;i++)g[i]=c.g[i];}voidoperator=(constChromosome&c)//重載=號(hào),進(jìn)行深復(fù)制for(inti=0;i<len;i++)g[i]=c.g[i];}};doublebestval;//記錄當(dāng)前所得的最優(yōu)值ChromosomebestC;//記錄當(dāng)前最優(yōu)值對(duì)應(yīng)的個(gè)體染色體Chromosomegroup[mxn],temGroup[mxn];//個(gè)體的種群,輔助數(shù)組//目標(biāo)函數(shù)doublef(doublex,doubley){returnx*sin(6*y)+y*cos(8*x);}//解碼函數(shù),從染色體取得x和y的值voiddecode(constChromosome&c,double&x,double&y){doublenum=pow(2.0,len/2.0);inttem=0;for(inti=len-1,q=1;i>=len/2;i一)tem+=c.g[i]*q,q=q*2;y=1+(2-1)/num*tem;tem=0;for(inti=len/2-1,q=1;i>=0;i一)tem+=c.g[i]*q,q=q*2;x=1+(2-1)/num*tem;}//適應(yīng)度函數(shù),為幸免負(fù)值,把目標(biāo)函數(shù)加一個(gè)正數(shù){{doublefitness(constChromosome&c){doublex,y;decode(c,x,y);returnf(x,y)+5;}//輔助函數(shù),生成0-1之間的隨機(jī)小數(shù)doubleinlinerandom01(){returnrand()%10000/10000.0;}//選擇操作voidselect(Chromosomegroup[mxn]){//計(jì)算每一個(gè)個(gè)體的選擇概率doublefitnessVal[mxn];for(inti=0;i<N;i++)doublesum=0;for(inti=0;i<N;i++)doubleprob[mxn];for(inti=0;i<N;i++)//隨機(jī)選擇N個(gè)個(gè)體組成新種群intselectId[mxn];for(inti=1;i<N;i++)for(inti=0;i<N;i++)fitnessVal[i]=fitness(group[i]);sum+=fitnessVal[i];prob[i]=fitnessVal[i]/sum;prob[i]+=prob[i-1];//利用輪盤賭算法選擇個(gè)體doublerandNum=random01();intintj;{{for(j=0;j<N-1;j++){if(randNum<prob[j]){selectld[i]=j;break;}if(j==N-1)selectld[i]=j;}//把種群更新為新選擇的個(gè)體集合for(for(inti=0;i<N;i++)for(inti=0;i<N;i++)}temGroup[i]=group[i];group[i]=temGroup[selectld[i]];//交叉操作,利用多點(diǎn)交叉voidcrossover(Chromosome&c1,Chromosome&c2){//生成交叉點(diǎn)位置,并排序intcrosspoint[mxn];for(inti=0;i<crossnum;i++)crosspoint[i]=rand()%len;sort(crosspoint,crosspoint+crossnum);//進(jìn)行交叉boolflag=0;for(inti=0,j=0;i<len;i++)if(!flag)swap(c1.g[i],c2.g[i]);ifif(i==crosspoint[j]){//若是假設(shè)干個(gè)交叉點(diǎn)重合,那么成效疊加//偶數(shù)個(gè)交叉點(diǎn)成效相當(dāng)于沒(méi)有交叉點(diǎn)while(j<crossnum&&i==crosspoint[j]){j++;flag=!flag;}}}}//變異操作voidmutate(Chromosome&c){//隨機(jī)選擇一名進(jìn)行翻轉(zhuǎn)inti=rand()%len;c.g[i]=!c.g[i];}//獲取種群最優(yōu)個(gè)體intgetOptimal(Chromosomegroup[mxn],double&x,double&y,double&val){//計(jì)算適應(yīng)值,遍歷取得最優(yōu)值并進(jìn)行解碼doublefitnessVal[mxn];for(inti=0;i<N;i++)fitnessVal[i]=fitness(group[i]);intid=0;for(inti=1;i<N;i++)if(fitnessVal[i]>fitnessVal[id])id=i;{{decode(group[id],x,y);val=f(x,y);returnid;}//遺傳算法總代碼voidGA(double&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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-2030年中國(guó)履帶起重機(jī)市場(chǎng)發(fā)展趨勢(shì)與十三五規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)對(duì)叔丁基苯甲酸行業(yè)競(jìng)爭(zhēng)格局及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)寵物店市場(chǎng)發(fā)展規(guī)模及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)內(nèi)燃機(jī)市場(chǎng)運(yùn)行狀況及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)井用潛水泵產(chǎn)業(yè)運(yùn)行狀況及發(fā)展前景分析報(bào)告
- 2025-2030年中國(guó)3D電影行業(yè)運(yùn)行動(dòng)態(tài)與發(fā)展趨勢(shì)分析報(bào)告
- 2025年房產(chǎn)銷售合同7篇
- 商品房交易合同
- 2025年版文明綜合項(xiàng)目施工合同7篇
- 民事糾紛和解合同協(xié)議
- 水力壓裂技術(shù)詳解334頁(yè)(PPT 最新技術(shù))_ppt
- 布洛維:拓展個(gè)案法
- SolidWorksTopDown設(shè)計(jì)方法實(shí)際應(yīng)用
- 七年級(jí)歷史第5課--安史之亂與唐朝衰亡ppt課件
- 戶外LED顯示屏設(shè)計(jì)施工方案.docx
- 上崗證WORD模板
- 凈土資糧——信愿行(05)第三講安住在彌陀大愿之海
- 化工車間開(kāi)停車風(fēng)險(xiǎn)分析
- 市政小三線施工方案(共22頁(yè))
- 靜壓樁機(jī)、鉆孔灌注樁、沉槽機(jī)CAD圖形
- 易經(jīng)(拼音版)
評(píng)論
0/150
提交評(píng)論