遺傳演算法工具箱的具體使用

2021-03-03 21:54:37 字數 3190 閱讀 4632

1樓:匿名使用者

matlab遺傳演算法工具箱函式及例項講解 核心函636f707962616964757a686964616f31333332623934數:

(1)function [pop]=initializega(num,bounds,eevalfn,eevalops,options)--初始種群的生成函式

【輸出引數】

pop--生成的初始種群

【輸入引數】

num--種群中的個體數目

bounds--代表變數的上下界的矩陣

eevalfn--適應度函式

eevalops--傳遞給適應度函式的引數

options--選擇編碼形式(浮點編碼或是二進位制編碼)[precision f_or_b],如

precision--變數進行二進位制編碼時指定的精度

f_or_b--為1時選擇浮點編碼,否則為二進位制編碼,由precision指定精度)

(2)function [x,endpop,bpop,traceinfo] = ga(bounds,evalfn,evalops,startpop,opts,...

termfn,termops,selectfn,selectops,xoverfns,xoverops,mutfns,mutops)--遺傳演算法函式

【輸出引數】

x--求得的最優解

endpop--最終得到的種群

bpop--最優種群的一個搜尋軌跡

【輸入引數】

bounds--代表變數上下界的矩陣

evalfn--適應度函式

evalops--傳遞給適應度函式的引數

startpop-初始種群

opts[epsilon prob_ops display]--opts(1:2)等同於initializega的options引數,第三個引數控制是否輸出,一般為0。如[1e-6 1 0]

termfn--終止函式的名稱,如['maxgenterm']

termops--傳遞個終止函式的引數,如[100]

selectfn--選擇函式的名稱,如['normgeomselect']

selectops--傳遞個選擇函式的引數,如[0.08]

xoverfns--交叉函式名稱表,以空格分開,如['arithxover heuristicxover ******xover']

xoverops--傳遞給交叉函式的參數列,如[2 0;2 3;2 0]

mutfns--變異函式表,如['boundarymutation multinonunifmutation nonunifmutation unifmutation']

mutops--傳遞給交叉函式的參數列,如[4 0 0;6 100 3;4 100 3;4 0 0]

【問題】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9

【分析】選擇二進位制編碼,種群中的個體數目為10,二進位制編碼長度為20,交叉概率為0.95,變異概率為0.08

【程式清單】

%編寫目標函式

function[sol,eval]=fitness(sol,options)

x=sol(1);

eval=x+10*sin(5*x)+7*cos(4*x);

%把上述函式儲存為fitness.m檔案並放在工作目錄下

initpop=initializega(10,[0 9],'fitness');%生成初始種群,大小為10

[x endpop,bpop,trace]=ga([0 9],'fitness',,initpop,[1e-6 1 1],'maxgenterm',25,'normgeomselect',...

[0.08],['arithxover'],[2],'nonunifmutation',[2 25 3]) %25次遺傳迭代

運算借過為:x =

7.8562 24.8553(當x為7.8562時,f(x)取最大值24.8553)

注:遺傳演算法一般用來取得近似最優解,而不是最優解。

遺傳演算法例項2

【問題】在-5<=xi<=5,i=1,2區間內,求解

f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.

^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.

71282的最小值。

【分析】種群大小10,最大代數1000,變異率0.1,交叉率0.3

【程式清單】

%源函式的matlab**

function [eval]=f(sol)

numv=size(sol,2);

x=sol(1:numv);

eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;

%適應度函式的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)*[-5 5];

[p,endpop,bestsols,trace]=ga(bounds,'fitness')

注:前兩個檔案儲存為m檔案並放在工作目錄下,執行結果為

p =0.0000 -0.0000 0.0055

大家可以直接繪出f(x)的圖形來大概看看f(x)的最值是多少,也可是使用優化函式來驗證。matlab命令列執行命令:

fplot('x+10*sin(5*x)+7*cos(4*x)',[0,9])

matlab工具箱中的神經網路和遺傳演算法要怎麼呼叫?

2樓:匿名使用者

都是有兩來種呼叫方法,一種圖源形介面的,這個bai從開始菜du單,然後工具,然後從

zhi裡面找神dao經網路 neural ***work,遺傳演算法工具是 全域性優化工具箱裡面的,global optimization。

另外 一種通過命令列呼叫,這個需要你理解你都要做什麼,我用神經網路舉例。第一步需要先整理出輸入變數和輸出變數,第二步設計並初始化神經網路,第三部訓練,第四部獲得結果。

如果你想結合這兩者,就會更加複雜,詳細的你可以再問。我曾經做過用遺傳演算法優化神經網路的工具。

在matlab裡面GA遺傳演算法工具箱中怎麼找到多個區域性最優解,我現在只能找到全域性最優解

這個需要根據引數設定來進行的,引數設定合理就可以得到全域性最優解,反之,可能得到區域性最優解 用matlab優化工具箱自帶的遺傳演算法 只能找到近似最優解 時,往往重複計算很多次都不能得到最優解 要想得到較精確的最優解,可以通過設定function tolerance的誤差值,constraint ...

遺傳演算法中的錦標賽選擇演算法的思想是什麼

我理解的是,在50個人中,隨機選擇兩組人,每組10個人,對於每組的10個人按適應度進行排列,選擇兩組中適應度最好的兩個個體作為母代進行兩兩交叉 然後再從剩下來的48個人中,隨機選擇兩組人,每組10個人,對於每組的10個人按適應度進行排列,選擇兩組中適應度最好的兩個個體作為母代進行兩兩交叉 依此類推,...

遺傳演算法中常用的適應度函式是什麼呢

1.物競 適應度函式 fitness function 自然界生物競爭過程往往包含兩個方面 生物相互間的搏鬥與及生物與客觀環境的搏鬥過程。但在我們這個例項裡面,你可以想象到,袋鼠相互之間是非常友好的,它們並不需要互相搏鬥以爭取生存的權利。它們的生死存亡更多是取決於你的判斷。因為你要衡量哪隻袋鼠該殺,...