Ⅰ matlab優化工具箱中遺傳演算法的問題
ga就是在窮舉不可能完成時,用一種方式找到最優解
ga工具的完整形式如下表示
[X,FVAL,EXITFLAG,OUTPUT,POPULATION,SCORES] =
GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options)
X是最優自變數
FVAL是求得的最優值
其他以此是推出標志,結構體,終止時的總群,終止時種群函數值
後半部分以此是目標函數,目標函數自變數個數
A和b是線性約束不等式AX〈b
Aeq和beq是一對線性等式約束,AeqX=beq
lb是X值下限,ub是X值下限
NONLCON是非線性約束函數 options是運行方式。這兩個可以寫函數自己完成,也可默認
函數默認計算最小值,計算最大值要加負號
非線性約束條件的寫法
function [c,ceq]=nonlcon(x) 定義函數自變數是x,x可以是一列矩陣
c=[]; c表示非線性等式約束,以為沒有,所以為空
ceq=[x(1)-2*(x(2))^2;
x(1)+X(2) ] ceq是非線性不等式約束,默認ceq<=0,ceq可以為一列矩陣.
>>
Ⅱ 求解:怎樣使用MATLAB中的遺傳演算法計算器Optimization Tool中的GA——Genetic Algorithm,如圖,重謝
比如通過MATLAB遺傳演算法的思想求解f(x)=x*sin(10pi*x)+2.0,-1<=x<=2的最大值問題,結果精確版到3位小數。
首先在matlab命令權窗口輸入f=@(x)-(x*sin(10*pi*x)+2) 輸出結果為
>> f=@(x)-(x*sin(10*pi*x)+2)
f =
@(x)-(x*sin(10*pi*x)+2)
接著輸入gatool會打開遺傳演算法工具箱
顯示51代之後演算法終止,最小結果為-3.85027334719567,對應的x為1.851,由於自定義函數加了負號,所以原式的最大值為3.85027334719567,對應的x為1.851。
不過這是遺傳演算法得到的結果,每次運行的結果可能會有所不同,而且不一定是確切的最大值。
遺傳演算法適合應用在一些求最優解比較復雜的問題(常規的演算法運算時間過長,甚至無法解決)。