㈠ 遺傳演算法工具箱初代個體設置問題
核心函數:
(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 simpleXover']
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]
注意】matlab工具箱函數必須放在工作目錄下
【問題】求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)
註:遺傳演算法一般用來取得近似最優解,而不是最優解。
你還是去圖書館找一下那本Matlab遺傳演算法工具箱教程的書看看吧。
遺傳演算法不一定可以在短時間內收斂的,要看你的適應度定義了,還有你的交叉、變異的參數都有關。
MATLAB遺傳演算法工具箱及應用
作者: 日期:
出版:西安電子科技大學出版社 精裝:膠版紙
開本: 版次:2005年4月第1版
頁數: ISBN:756061484
原價:26.0 元
㈡ 遺傳演算法中的適應度函數是什麼
適應度函數的選取直接影響到遺傳演算法的收斂速度以及能否找到最優解,因為遺傳演算法在進化搜索中基本不利用外部信息,僅以適應度函數為依據,利用種群每個個體的適應度來進行搜索。
因為適應度函數的復雜度是遺傳演算法復雜度的主要組成部分,所以適應度函數的設計應盡可能簡單,使計算的時間復雜度最小。
遺傳演算法評價一個解的好壞不是取決於它的解的結構,而是取決於該解的適應度值。這正體現了遺傳演算法「優勝劣汰」的特點。遺傳演算法不需要適應度函數滿足連續可微等條件,唯一要求是針對輸入可計算出能加以比較的非負結果。
(2)遺傳演算法工具箱適應度怎麼設置擴展閱讀
在遺傳演算法中,適應度是描述個體性能的主要指標。根據適應度的大小,對個體進行優勝劣汰。適應度是驅動遺傳演算法的動力。
從生物學角度講,適應度相當於「生存競爭、適者生存」的生物生存能力,在遺傳過程中具有重要意義。將優化問題的目標函數與個體的適應度建立映射關系,即可在群體進化過程中實現對優化問題目標函數的尋優。
㈢ 如何調用MATLAB遺傳演算法工具箱
1、打開MATLAB軟體。
㈣ 如何設置matlab遺傳演算法的適應度函數
f=1/(y-exp(x1)*x3+x4)/ln(x5*exp(x7)))^2即可
㈤ 如何在遺傳演算法中設置變數約束條件
1、首先打開matlab軟體,在「APP(應用)」選項卡中選擇「Optimization(優化)」工具箱。
㈥ matlab遺傳演算法工具箱應用問題.在適應度函數處應該輸入什麼約束條件怎麼輸入
這個ga工具箱只能解決簡單的線性約束問題,你的約束條件是非線性約束,所以你還是要使用gatbx菲爾德大學的那個工具箱,你的問題帶有不等式約束,轉化為無約束的拉格朗日對偶問題求解
㈦ 遺傳演算法工具箱的具體使用
matlab遺傳演算法工具箱函數及實例講解 核心函數:
(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 simpleXover']
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])
㈧ 遺傳演算法中怎麼構建適應度函數
適應度函數的選取直接影響到遺傳演算法的收斂速度以及能否找到最優解,因為遺傳演算法在進化搜索中基本不利用外部信息,僅以適應度函數為依據,利用種群每個個體的適應度來進行搜索。
因為適應度函數的復雜度是遺傳演算法復雜度的主要組成部分,所以適應度函數的設計應盡可能簡單,使計算的時間復雜度最小。
遺傳演算法評價一個解的好壞不是取決於它的解的結構,而是取決於該解的適應度值。這正體現了遺傳演算法「優勝劣汰」的特點。遺傳演算法不需要適應度函數滿足連續可微等條件,唯一要求是針對輸入可計算出能加以比較的非負結果。
相關內容解釋
遺傳演算法是計算數學中用於解決最佳化的搜索演算法,是進化演算法的一種。進化演算法最初是借鑒了進化生物學中的一些現象而發展起來的,這些現象包括遺傳、突變、自然選擇以及雜交等。遺傳演算法通常實現方式為一種計算機模擬。
對於一個最優化問題,一定數量的候選解(稱為個體)的抽象表示(稱為染色體)的種群向更好的解進化。傳統上,解用二進製表示(即0和1的串),但也可以用其他表示方法。
進化從完全隨機個體的種群開始,之後一代一代發生。在每一代中,整個種群的適應度被評價,從當前種群中隨機地選擇多個個體(基於它們的適應度),通過自然選擇和突變產生新的生命種群,該種群在演算法的下一次迭代中成為當前種群。
㈨ matlab遺傳演算法工具箱中關於integer variable indices怎麼設置
簡單介紹一下思路:
最重要的是確定適應度函數,只要確定這個函數就很容易了,就用你不會編程,直接調用matlab的工具箱就行了。
1st.設置種群規模,並初始化種群p,並計算各個個體的適應度。
例如,20個個體,每個個體包含5個變數,x1,x2,x3,x4,x5.
如果你用matlab來編程的話,這個可以很容易實現,會用到random('unif',a,b)這個函數吧。
例如x1的取值范圍是[0,1],那麼x1=random('unif',0,1).