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