資源描述:
《遺傳算法入門(mén)新手必備matlab遺傳算法程序.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、%求下列函數(shù)的最大值%%f(x)=10*sin(5x)+7*cos(4x)x∈[0,10]%%將x的值用一個(gè)10位的二值形式表示為二值問(wèn)題,一個(gè)10位的二值數(shù)提供的分辨率是每為(10-0)/(2^10-1)≈0.01。%%將變量域[0,10]離散化為二值域[0,1023],x=0+10*b/1023,其中b是[0,1023]中的一個(gè)二值數(shù)。%%%%---------------------------------------------------------------------------------------------
2、-----------------%%--------------------------------------------------------------------------------------------------------------%%編程%-----------------------------------------------%2.1初始化(編碼)%initpop.m函數(shù)的功能是實(shí)現(xiàn)群體的初始化,popsize表示群體的大小,chromlength表示染色體的長(zhǎng)度(二值數(shù)的長(zhǎng)度),%長(zhǎng)度大小取決于
3、變量的二進(jìn)制編碼的長(zhǎng)度(在本例中取10位)。%遺傳算法子程序%Name:initpop.m%初始化functionpop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength));%rand隨機(jī)產(chǎn)生每個(gè)單元為{0,1}行數(shù)為popsize,列數(shù)為chromlength的矩陣,%round對(duì)矩陣的每個(gè)單元進(jìn)行圓整。這樣產(chǎn)生的初始種群。%2.2計(jì)算目標(biāo)函數(shù)值%2.2.1將二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)(1)%遺傳算法子程序%Name:decodebinary.m%產(chǎn)生[2
4、^n2^(n-1)...1]的行向量,然后求和,將二進(jìn)制轉(zhuǎn)化為十進(jìn)制functionpop2=decodebinary(pop)[px,py]=size(pop);%求pop行和列數(shù)fori=1:pypop1(:,i)=2.^(py-i).*pop(:,i);endpop2=sum(pop1,2);%求pop1的每行之和%2.2.2將二進(jìn)制編碼轉(zhuǎn)化為十進(jìn)制數(shù)(2)%decodechrom.m函數(shù)的功能是將染色體(或二進(jìn)制編碼)轉(zhuǎn)換為十進(jìn)制,參數(shù)spoint表示待解碼的二進(jìn)制串的起始位置%(對(duì)于多個(gè)變量而言,如有兩個(gè)變量,采用20為
5、表示,每個(gè)變量10為,則第一個(gè)變量從1開(kāi)始,另一個(gè)變量從11開(kāi)始。本例為1),%參數(shù)1ength表示所截取的長(zhǎng)度(本例為10)。%遺傳算法子程序%Name:decodechrom.m%將二進(jìn)制編碼轉(zhuǎn)換成十進(jìn)制functionpop2=decodechrom(pop,spoint,length)pop1=pop(:,spoint:spoint+length-1);pop2=decodebinary(pop1);%2.2.3計(jì)算目標(biāo)函數(shù)值%calobjvalue.m函數(shù)的功能是實(shí)現(xiàn)目標(biāo)函數(shù)的計(jì)算,其公式采用本文示例仿真,可根據(jù)不同優(yōu)化
6、問(wèn)題予以修改。%遺傳算法子程序%Name:calobjvalue.m%實(shí)現(xiàn)目標(biāo)函數(shù)的計(jì)算function[objvalue]=calobjvalue(pop)temp1=decodechrom(pop,1,10);%將pop每行轉(zhuǎn)化成十進(jìn)制數(shù)x=temp1*10/1023;%將二值域中的數(shù)轉(zhuǎn)化為變量域的數(shù)objvalue=10*sin(5*x)+7*cos(4*x);%計(jì)算目標(biāo)函數(shù)值%2.3計(jì)算個(gè)體的適應(yīng)值%遺傳算法子程序%Name:calfitvalue.m%計(jì)算個(gè)體的適應(yīng)值functionfitvalue=calfitvalu
7、e(objvalue)globalCmin;Cmin=0;[px,py]=size(objvalue);fori=1:pxifobjvalue(i)+Cmin>0temp=Cmin+objvalue(i);elsetemp=0.0;endfitvalue(i)=temp;endfitvalue=fitvalue';%2.4選擇復(fù)制%選擇或復(fù)制操作是決定哪些個(gè)體可以進(jìn)入下一代。程序中采用賭輪盤(pán)選擇法選擇,這種方法較易實(shí)現(xiàn)。%根據(jù)方程pi=fi/∑fi=fi/fsum,選擇步驟:%1)在第t代,由(1)式計(jì)算fsum和pi%2)產(chǎn)生{
8、0,1}的隨機(jī)數(shù)rand(.),求s=rand(.)*fsum%3)求∑fi≥s中最小的k,則第k個(gè)個(gè)體被選中%4)進(jìn)行N次2)、3)操作,得到N個(gè)個(gè)體,成為第t=t+1代種群%遺傳算法子程序%Name:selection.m%選擇復(fù)制functi