版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
用GA找到函數(shù)最小值x=ga(fitnessfcn,nvars)局部無約束最小值,x是目標(biāo)函數(shù)的適應(yīng)度函數(shù),nvars是適應(yīng)度函數(shù)的尺寸(設(shè)計變量的數(shù)量)。目標(biāo)函數(shù)和適應(yīng)度函數(shù)接受了1XN大小的x矢量,在x返回一個標(biāo)量的計算值。x=ga(fitnessfcn,nvars,A,b)在線性不等式約束下,適應(yīng)度函數(shù)的局部最小值。如果這個問題有m個線性不等式和n個變量,則A是mXn矩陣,b是mX1矩陣。注意:當(dāng)人口類型選項設(shè)置為“位串”或者“自定義”,線性約束不滿足。x=ga(fitnessfcn,nvars,A,b,Aeq,beq)存在線性等式約束下,適應(yīng)度函數(shù)的局部最小值。如果沒有不等式存在,設(shè)置A=[]和b=[]。如果問題存在r個線性等式約束和n個變量,那么Aeq是rXn矩陣的大小,beq是r大小的矢量。注意:當(dāng)人口類型選項設(shè)置為“位串”或者“自定義”,線性約束不滿足。x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)定義了一系列設(shè)計變量x的最小和最大邊界。以至于在范圍內(nèi)找到一個解。如果沒有邊界存在,LB和UB設(shè)置為空矩陣。如果x(i)無下界,設(shè)置LB(i)=-Inf;如果x(i)無上界,設(shè)置UB(i)=Inf。x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon)服從在非線性約束條件下的最小值,非線性函數(shù)接收x,返回C和Ceq向量,分別代表非線性的不等式和等式。GA最小化適應(yīng)度函數(shù),在C(x)W0和Ceq(x)=0的條件下。如果無邊界存在,設(shè)置LB=[]和UB=[]。注意:當(dāng)人口類型選項設(shè)置為“位串”或者“自定義”,非線性約束不滿足。x=ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB,nonlcon,options)用在結(jié)構(gòu)選項中的值代替默認(rèn)的優(yōu)化參數(shù)來進行最小化,它也可以用gaoptimset函數(shù)來創(chuàng)建,具體參考gaoptimset的用法。x=ga(problem)在problem下找到最小值,problem是包含下表的結(jié)構(gòu)。1fitnessfcnFitnessfunction適應(yīng)度函數(shù)1nvarsNumberofdesignvariables設(shè)計變量的數(shù)目
1AineqAmatrixforlinearinequalityconstraints線性不等式約束矩陣1Bineqbvectorforlinearinequalityconstraints線性不等式約束向量1AeqAmatrixforlinearequalityconstraints線性等式約束矩陣1Beqbvectorforlinearequalityconstraints線性等式約束向量1lbLowerboundonx 最小邊界1ubUpperboundonx 最大邊界1nonlconNonlinearconstraintfunction 非線性約束函數(shù)1randstateOptionalfieldtoresetrandstate重新設(shè)置均勻分布狀態(tài)選項欄1randnstateOptionalfieldtoresetrandnstate重新設(shè)置正態(tài)分布狀態(tài)選項欄1solver'ga'1optionsOptionsstructurecreatedusinggaoptimset正如在使用者向?qū)У膬?yōu)化工具ImportingandExportingYourWork描述的一樣,它依靠從優(yōu)化工具導(dǎo)出一個問題來創(chuàng)建結(jié)構(gòu)問題。[x,fval]=ga(...)在x下,返回適應(yīng)度函數(shù)的值fval。[x,fval,exitflag]=ga(...)返回exitflag(終止條件值),整體識別算法的終止條件,下面列出了exitflag的值和算法相應(yīng)的終止條件。1—Averagecumulativechangeinvalueofthefitnessfunctionoveroptions.StallGenLimitgenerationslessthanoptions.TolFunandconstraintviolationlessthanoptions.TolCon.
2—Fitnesslimitreachedandconstraintviolationlessthanoptions.TolCon.3—Thevalueofthefitnessfunctiondidnotchangeinoptions.StallGenLimitgenerationsandconstraintviolationlessthanoptions.TolCon.4—Magnitudeofstepsmallerthanmachineprecisionandconstraintviolationlessthanoptions.TolCon.0—Maximumnumberofgenerationsexceeded.-1—Optimizationterminatedbytheoutputorplotfunction.-2—Nofeasiblepointfound.-4—Stalltimelimitexceeded.-5—Timelimitexceeded.[x,fval,exitflag,output]=ga(...)返回output的值,它是一個包含了每一代的輸出和關(guān)于算法的其他性能信息,它的結(jié)構(gòu)包括下面的范圍。randstate—Thestateofrand,theMATLABrandomnumbergenerator,justbeforethealgorithmstarted.randnstate—ThestateofrandntheMATLABnormalrandomnumbergenerator,justbeforethealgorithmstarted.Youcanusethevaluesofrandstateandrandnstatetoreproducetheoutputofga.SeeReproducingYourResults.generations—Thenumberofgenerationscomputed.funccount—Thenumberofevaluationsofthefitnessfunctionmessage—Thereasonthealgorithmterminated.maxconstraint—Maximumconstraintviolation,ifany.[x,fval,exitflag,output,population]=ga(...)返回population的矩陣,它的行是最后一代。[x,fval,exitflag,output,population,scores]=ga(...)返回最后一代的scores的值。注意:(默認(rèn)下)對于族群類型使用DoubleVector的問題,GA不會接受任何那些輸入類型復(fù)雜的函數(shù)。為了解決復(fù)雜數(shù)據(jù)所涉及的問題,靠分開你的實部和虛部,寫下你的函數(shù)使他們接收實向量。例子:根據(jù)軟件提供的lincontest6(一個二元二次日標(biāo)函數(shù),此處即是適應(yīng)度函數(shù)),上述程序找到了函數(shù)的最小值。終止條件為:適應(yīng)度值得平均變化小于選項TolFun。A=[11;-12;21];b=[2;2;3];lb=zeros(2,1);[x,fval,exitflag]=ga(@lincontest6,2,A,b,[],[],lb)Optimizationterminated:averagechangeinthefitnessvaluelessthanoptions.TolFun.x=0.7794 1.2205fval=-8.03916(適應(yīng)度函數(shù)的值)exitflag=1(終止條件值)求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9f=inline('-(x+10*sin(5*x)+7*cos(4*x))');[x,fval]=ga(f,1,[],[],[],[],0,9);x,fval=-fvalOptimizationterminated:averagechangeinthefitnessvaluelessthanoptions.TolFun.x=1.5735fval=18.5722Optimizationterminated:averagechangeinthefitnessvaluelessthanoptions.TolFun.x=0.2272fval=13.5996注:由于遺傳法的不確定性,每次得到的解可能不同。ga是matlab自帶的遺傳工具箱中的遺傳算法函數(shù),其中已經(jīng)用到了選擇、交叉、變異,你如果想知道其具體是怎么實現(xiàn)的,可以自己打開ga的源程序去看。遺傳算法的MATLAB程序之option設(shè)置研究:functionmy_ga()options=gaoptimset;%設(shè)置變量范圍options=gaoptimset(options,'PopInitRange',[0;9]);%設(shè)置種群大小options=gaoptimset(options,'PopulationSize',100);%設(shè)置迭代次數(shù)options=gaoptimset(options,'Generations',100);%選擇選擇函數(shù)options=gaoptimset(options,'SelectionFcn',@selectionroulette);%選擇交叉函數(shù)options=gaoptimset(options,'CrossoverFcn',@crossoverarithmetic);%選擇變異函數(shù)options=gaoptimset(options,'MutationFcn',@mutationuniform);%設(shè)置繪圖:解的變化、種群平均值的變化options=gaoptimset(options,'PlotFcns',{@gaplotbestf});%執(zhí)行遺傳算法,fitness.m是函數(shù)文件[x,fval]=ga(@fitness,1,options)例子:A=[11;-12;21];b=[2;2;3];lb=zeros(2,1);%Usemutationfunctionwhichcanhandleconstraintsoptions=gaoptimset('MutationFcn',@mutationadaptfeasible);[x,fval,exitflag]=ga(@lincontest6,2,A,b,[],[],lb,[],[],options);Optimizationterminated:averagechangeinthefitnessvaluelessthanoptions.TolFun.x,fval=fvalx=0.7043 1.2967fval=-8.1725注意:由于GA是一個概率過程,所以每次迭代的情況是不一樣的;系統(tǒng)參數(shù)不同,迭代情況也不同。在實驗中參數(shù)一般選取如下:個體數(shù)n=50-200,變異概率Pm=0?03,交叉概率Pc=0.6。變異概率太大,會導(dǎo)致不穩(wěn)定。求matlab編的遺傳算法源程序,用于求解帶約束的優(yōu)化問題。要源程序啊,不要使用matlab工具箱的。對于初學(xué)者,尤其是還沒有編程經(jīng)驗的非常有用的一個文件遺傳算法實例%下面舉例說明遺傳算法%%求下列函數(shù)的最大值%%f(x)=10*sin(5x)+7*cos(4x)x^[0,10]%%將x的值用一個10位的二值形式表示為二值問題,一個10位的二值數(shù)提供的分辨率是每為(10-0)/(2八10-1)^0.01。%%將變量域[0,10]離散化為二值域[0,1023],x=0+10*b/1023,其中b是[0,1023]中的一個二值數(shù)。%%%% %% %%編程% %2.1初始化(編碼)%initpop.m函數(shù)的功能是實現(xiàn)群體的初始化,popsize表示群體的大小,chromlength表示染色體的長度(二值數(shù)的長度),%長度大小取決于變量的二進制編碼的長度(在本例中取10位)。%遺傳算法子程序%Name:initpop.m%初始化functionpop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength));%rand隨機產(chǎn)生每個單元為{0,1}彳亍數(shù)為popsize,列數(shù)為chromlength的矩陣,%roud對矩陣的每個單元進行圓整。這樣產(chǎn)生的初始種群%2.2計算目標(biāo)函數(shù)值%2.2.1將二進制數(shù)轉(zhuǎn)化為十進制數(shù)(1)%遺傳算法子程序%Name:decodebinary.m%產(chǎn)生[252八(n-1)...1]的行向量,然后求和,將二進制轉(zhuǎn)化為十進制functionpop2=decodebinary(pop)[px,py]=size(pop);%求pop行和列數(shù)fori=1:pypop1(:,i)=2.八(py-i).*pop(:,i);endpop2=sum(pop1,2);%求popl的每行之和%2.2.2將二進制編碼轉(zhuǎn)化為十進制數(shù)(2)%decodechrom.m函數(shù)的功能是將染色體(或二進制編碼)轉(zhuǎn)換為十進制,參數(shù)spoint表示待解碼的二進制串的起始位置%(對于多個變量而言,如有兩個變量,采用20為表示,每個變量10為,則第一個變量從1開始,另一個變量從11開始。本例為1),%參數(shù)1ength表示所截取的長度(本例為10)。%遺傳算法子程序%Name:decodechrom.m%將二進制編碼轉(zhuǎn)換成十進制functionpop2=decodechrom(pop,spoint,length)pop1=pop(:,spoint:spoint+length-1);pop2=decodebinary(pop1);%2.2.3計算目標(biāo)函數(shù)值%calobjvalue.m函數(shù)的功能是實現(xiàn)目標(biāo)函數(shù)的計算,其公式采用本文示例仿真,可根據(jù)不同優(yōu)化問題予以修改。%遺傳算法子程序%Name:calobjvalue.m%實現(xiàn)目標(biāo)函數(shù)的計算function[objvalue]=calobjvalue(pop)temp1=decodechrom(pop,1,10);%將pop每行轉(zhuǎn)化成十進制數(shù)x=temp1*10/1023;%將二值域中的數(shù)轉(zhuǎn)化為變量域的數(shù)objvalue=10*sin(5*x)+7*cos(4*x);%計算目標(biāo)函數(shù)值%2.3計算個體的適應(yīng)值%遺傳算法子程序%Name:calfitvalue.m%計算個體的適應(yīng)值functionfitvalue=calfitvalue(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ù)制操作是決定哪些個體可以進入下一代。程序中采用賭輪盤選擇法選擇,這種方法較易實現(xiàn)。%根據(jù)方程pi=fi/£fi=fi/fsum,選擇步驟:%1)在第t代,由(1)式計算fsum和pi%2)產(chǎn)生{0,1}的隨機數(shù)rand(.),求s=rand(.)*fsum%3)求Zfi>s中最小的k,則第k個個體被選中%4)進行N次2)、3)操作,得到N個個體,成為第t=t+1代種群%遺傳算法子程序%Name:selection.m%選擇復(fù)制function[newpop]=selection(pop,fitvalue)totalfit=sum(fitvalue);%求適應(yīng)值之和fitvalue=fitvalue/totalfit;%單個個體被選擇的概率fitvalue=cumsum(fitvalue);%如fitvalue=[1234],則cumsum(fitvalue)=[13610][px,py]=size(pop);ms=sort(rand(px,1));%從小到大排列fitin=1;newin=1;whilenewin<=pxif(ms(newin))<fitvalue(fitin)newpop(newin)=pop(fitin);newin=newin+1;elsefitin=fitin+1;endend%2.5交叉%交叉(crossover),群體中的每個個體之間都以一定的概率pc交叉,即兩個個體從各自字符串的某一位置%(一般是隨機確定)開始互相交換,這類似生物進化過程中的基因分裂與重組。例如,假設(shè)2個父代個體x1,x2為:%x1=0100110%x2=1010001%從每個個體的第3位開始交叉,交又后得到2個新的子代個體y1,y2分別為:%y1=0100001%y2=1010110%這樣2個子代個體就分別具有了2個父代個體的某些特征。利用交又我們有可能由父代個體在子代組合成具有更高適合度的個體。%事實上交又是遺傳算法區(qū)別于其它傳統(tǒng)優(yōu)化方法的主要特點之一。%遺傳算法子程序%Name:crossover.m%交叉function[newpop]=crossover(pop,pc)[px,py]=size(pop);newpop=ones(size(pop));for『1:2:px-1if(rand<pc)cpoint=round(rand*py);newpop(i,:)=[pop(i,1:cpoint),pop(i+1,cpoint+1:py)];newpop(i+1,:)=[pop(i+1,1:cpoint),pop(i,cpoint+1:py)];elsenewpop(i,:)=pop(i);newpop(i+1,:)=pop(i+1);endend%2.6變異%變異(mutation),基因的突變普遍存在于生物的進化過程中。變異是指父代中的每個個體的每一位都以概率pm翻轉(zhuǎn),即由“1”變?yōu)椤?”,%或由“0”變?yōu)椤?”。遺傳算法的變異特性可以使求解過程隨機地搜索到解可能存在的整個空間,因此可以在一定程度上求得全局最優(yōu)解。%遺傳算法子程序%Name:mutation.m%變異function[newpop]=mutation(pop,pm)[px,py]=size(pop);newpop=ones(size(pop));fori=1:pxif(rand<pm)mpoint=round(rand*py);ifmpoint<=0mpoint=1;endnewpop(i)=pop(i);ifany(newpop(i,mpoint))==0newpop(i,mpoint)=1;elsenewpop(i,mpoint)=0;endelsenewpop(i)=pop(i);endend%2.7求出群體中最大得適應(yīng)值及其個體%遺傳算法子程序%Name:best.m%求出群體中適應(yīng)值最大的值function[bestindividual,bestfit]=best(pop,fitvalue)[px,py]=size(pop);bestindividual=pop(1,:);bestfit=fitvalue(1);fori=2:pxiffitvalue(i)>bestfitbestindividual=pop(i,:);bestfit=fitvalue(i);endend%2.8主程序%遺傳算法主程序%Name:genmain05.mclearclfpopsize=20;%群體大小chromlength=10;%字符串長度(個體長度)pc=0.6;%交叉概率pm=0.001;%變異概率pop=initpop(popsize,chromlength);%隨機產(chǎn)生初始群體fori=1:20%20為迭代次數(shù)[objvalue]=calobjvalue(pop);%計算目標(biāo)函數(shù)fitvalue=calfitvalue(objvalue);%計算群體中每個個體的適應(yīng)度[newpop]=selection(pop,fitvalue);%復(fù)制[newpop]=crossover(pop,pc);%交叉[newpop]=mutation(pop,pc);%變異[bestindividual,bestfit]=best(pop,fitvalue);%求出群體中適應(yīng)值最大的個體及其適應(yīng)值y(i)=max(bestfit);n(i)=i;pop5=bestindividual;x(i)=decodechrom(pop5,1,chromlength)*10/1023;pop=newpop;endfplot('10*sin(5*x)+7*cos(4*x)',[010])holdonplot(x,y,'r*')holdoff[zindex]=max(y);%計算最大值及其位置x5=x(index)%計算最大值對應(yīng)的x值y=z【問題】求f(x)=x10*sin(5x)7*cos(4x)的最大值,其中0<=x<=9【分析】選擇二進制編碼,種群中的個體數(shù)目為10,二進制編碼長度為20,交叉概率為0.95,變異概率為0.08【程序清單】%編寫目標(biāo)函數(shù)function[sol,eval]=fitness(sol,options)x=sol(1);eval=x10*sin(5*x)7*cos(4*x);%把上述函數(shù)存儲為fitness.m文件并放在工作目錄下initPop=initializega(10,[09],'fitness');%生成初始種群,大小為10[xendPop,bPop,trace]=ga([09],'fitness',[],initPop,[1e-611],'maxGenTerm',25,'normGeomSelect',...[0.08],['arithXover'],[2],'nonUnifMutation',[2253])%25次遺傳迭代運算借過為:x=7.856224.8553(當(dāng)x為7.8562時,f(x)取最大值24.8553)注:遺傳算法一般用來取得近似最優(yōu)解,而不是最優(yōu)解。遺傳算法實例2【問題】在一5<=Xi<=5,i=1,2區(qū)間內(nèi),求解f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.A2x2.八2)))-exp(0.5*(cos(2*pi*x1)cos(2*pi*x2)))22.71282的最小值?!痉治觥糠N群大小10,最大代數(shù)1000,變異率0.1,交叉率0.3【程序清單】%源函數(shù)的matlab代碼function[eval]=f(sol)numv=size(sol,2);x=sol(1:numv);eval=-20*exp(-0.2*sqrt(sum(x.A2)/numv)))-exp(sum(cos(2*pi*x))/numv)22.71282;%適應(yīng)度函數(shù)的matlab代碼function[sol,eval]=fitness(sol,options)numv=size(sol,2)-1;x=sol(1:numv);eval=f(x);eval=-eval;%遺傳算法的matlab代碼bounds=ones(2,1)*[-55];[p,endPop,bestSols,trace]=ga(bounds,'fitness')注:前兩個文件存儲為m文件并放在工作目錄下,運行結(jié)果為p=0.0000-0.00000.0055大家可以直接繪出f(x)的圖形來大概看看f(x)的最值是多少,也可是使用優(yōu)化函數(shù)來驗證。matlab命令行執(zhí)行命令:fplot('x10*sin(5*x)7*cos(4*x)',[0,9])注:evalops是傳遞給適應(yīng)度函數(shù)的參數(shù),opts是二進制編碼的精度,termops是選擇maxGenTerm結(jié)束函數(shù)時傳遞個maxGenTerm的參數(shù),即遺傳代數(shù)。xoverops是傳遞給交叉函數(shù)的參數(shù)。mutops是傳遞給變異函數(shù)的參數(shù)?!締栴}】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9【分析】選擇二進制編碼,種群中的個體數(shù)目為10,二進制編碼長度為20,交叉概率為0.95,變異概率為0.08【程序清單】%編寫目標(biāo)函數(shù)function[sol,eval]=fitness(sol,options)x=sol(1);eva
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024房產(chǎn)交易居間服務(wù)協(xié)議模板2
- 產(chǎn)品購銷協(xié)議格式(2024更新)
- 2024年柑橘采購與銷售協(xié)議
- 2024年勞動協(xié)議訂約細(xì)則與規(guī)范
- 2024年度中小企業(yè)貸款服務(wù)協(xié)議
- 2024高端別墅折疊門采購協(xié)議案例
- 2024年分公司加盟協(xié)議
- 月餅黏土課件教學(xué)課件
- 整形護理課件教學(xué)課件
- 完整足球模塊教案
- 大學(xué)生生涯規(guī)劃與職業(yè)發(fā)展知到章節(jié)答案智慧樹2023年魯東大學(xué)
- 葫蘆島鵬翔生物科技(集團)有限公司年產(chǎn)農(nóng)藥系列產(chǎn)品3700噸、年產(chǎn)胡椒環(huán)2000噸建設(shè)項目環(huán)評報告
- 地理規(guī)范化學(xué)習(xí)要求
- 民營醫(yī)院職稱崗位工資級崗位招聘分級表
- 人工智能在中學(xué)英語教學(xué)中的應(yīng)用探索共3篇
- 木工制作校本課程開發(fā)綱要
- 三秦出版社《綜合實踐活動》四年級下冊全冊教案【全套】
- 觸電事故應(yīng)急演練方案 觸電事故應(yīng)急演練記錄
- GB/T 33686-2017煤礦水水質(zhì)分析的一般規(guī)定
- GB/T 25995-2010精細(xì)陶瓷密度和顯氣孔率試驗方法
- 上海科技教育出版社八年級下冊信息技術(shù)教案全冊
評論
0/150
提交評論