遺傳演算法ga工具箱
㈠ 用遺傳演算法工具箱怎麼求解線性約束函數
Matlab遺傳演算法工具箱是可以施加的非線性隱性約束條件的。例如:
min z= 3050*x1³+0.25*x2;
其中x1定義域[-0.381,0.381],x2定義域[-100,100]
求目標函數值為10時的x1、x2值。
求解結果
x1=0.14169943480903302 x2=5.289387991237991
function [c,ceq]=ga_con(x) %非線性約束條件函數
c=10-(3050*x(1)^3+0.25*x(2));
ceq=[];
㈡ matlab遺傳演算法工具箱使用ga運行不出結果哪裡錯了
可能的原因是:
1.gatbx工具箱下的crtbp函數的文件名為CRTBP.M,大小寫不統一所以出現了warning,需要把回把它改為小答寫的crtbp.m;
2.gatbx屬於第三方工具箱,MATLAB自身對它是沒有說明的,所以搜不到這些
遺傳演算法
的指令。
㈢ 請教怎麼在matlab上安裝遺傳演算法工具箱啊,為什麼我安不上啊
安裝步驟
1.將GAOT工具箱文件拷貝至Matlab文件夾下,具體路徑為:
C:\program files\MATLAB\R2009a\toolbox。(也可以放在其他路徑,不一定放在toolbox裡面,比如C:\program files\MATLAB\R2009a也行)。
2.將GAOT工具箱路徑加入Matlab文件路徑之中。流程為:File-->Set Path-->Add with Subfolders。即,將C:\program files\MATLAB\R2009a\toolbox\gaot文件夾加入該路徑系統中。
3. 重新啟動Matlab,運行。
4. 但是在重新啟動後,你會發現在命令窗口,會出現如下警告。即安裝遺傳工具箱後出現問題:Warning: Name is nonexistent or not a directory: \afs\eos\info\ie\ie589k_info\GAOT
解決方案:打開gaot文件夾下的startup.m,這裡面寫著「path(path,'\afs\eos\info\ie\ie589k_info\GAOT');」只要將「\afs\eos\info\ie\ie589k_info\GAOT」改為goat當前所在的目錄,即「C:\program files\MATLAB\R2009a\toolbox\gaot」就可以了
5.測試是否安裝成功,方法如下:在命令窗口輸入:edit ga出現如下函數:function [x,fval,exitFlag,output,population,scores] = ga(fun,nvars,Aineq,bineq,Aeq,beq,lb,ub,nonlcon,options)此時你會發現這是MATLAB自帶的ga函數,並不是你想要的工具箱中的ga函數,這樣會在以後應用工具箱編寫程序是發生錯誤。
6. 解決上述問題的方法:為了統一,不管你是高版本還是低版本,都可以通過將GAOT工具箱中的ga重命名為gaot_ga(名字可以隨你定,但是不能改為大寫GA,原因是MATLAB會默認大小寫函數是同一個函數,不信你可以用edit ga和edit GA驗證),來實現解決上述問題。
這樣整個的GAOT工具箱安裝完備。
㈣ 求matlab遺傳演算法工具箱GA Toolbox。。並求解釋如下
GA自己寫一個就好了,也挺簡單的。
雖然很多函數都能知道表達式,但是仍然有很多函數不能用倒數來求解,所以要知道空間的極值和最值就必須用遍歷的方法。然而對於實數范圍內或者大規模數據的離散數據情況下,遍歷畫圖的方法會耗費很大的計算復雜度,因為你並不知道是在參數范圍的邊緣還是中間有最值,有多少個最值也不知道。GA就提供了一種基於種群的搜索優化方法,可以快速的收斂到優秀的解的個體,但是要防止陷入局部最優。
簡而言之就是遍歷的搜索方法要用時10小時完成的事情,GA快速優化可能1分鍾或者10分鍾搞定,佔用內存也少。
㈤ 如何調用MATLAB遺傳演算法工具箱
1、打開MATLAB軟體。
㈥ 遺傳演算法GA工具箱 的二進制bitstring相關選項怎麼設置
既然你用工具箱算,是二進制還是bit string沒啥區別,你也看不到。
bounds指的是變數的取值范圍,比如y = x1 +x2,
其中1<x1<5,3<x2<4,那lower就該填1,3,upper填5,4.integer variable indices用於整形變數,比如你的x1范圍是從[1,9],但是是1.2.3.4.5.6.7.8.9,而不是2.36,3.36這樣的浮點值。
㈦ matlab遺傳演算法工具箱安裝問題
直接在命令窗口裡邊輸入gatool就行了,用遺傳演算法還可以使用ga函數,具體使用格式可以在help系統里看ga,你還可以按照如下步驟打開遺傳演算法工具箱:1,打開matlab,2點擊左下方的start按鈕
3,點toolboxes,打開後選擇genetic
algorithm
and
direct
search
然後就可以進入gatool了,然後就會彈出ga工具箱(註:我的版本是7.7的,不同版本可能不同)
㈧ matlab遺傳演算法工具箱在哪
直接在命令窗口裡邊輸入gatool就行了,用遺傳演算法還可以使用ga函數,具體使用格式可以在help系統里看ga,你還可以按照如下步驟打開遺傳演算法工具箱:1,打開MATLAB,2點擊左下方的START按鈕 3,點toolboxes,打開後選擇Genetic Algorithm and Direct Search 然後就可以進入gatool了,然後就會彈出ga工具箱(註:我的版本是7.7的,不同版本可能不同)
㈨ MATLAB的遺傳演算法工具箱GA是怎麼用的
把這些文件裝載工具箱的文件夾路徑下,在把MATLAB讀的路徑設置在那裡,直接輸入文件名和需要輸入的內容就行了。
㈩ 遺傳演算法工具箱的具體使用
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])