遺傳算法加入非線性約束后計算速度急劇下降
各位大神,小弟在使用Matlab自帶的遺傳算法ga函數(shù)時,加入非線性約束之后計算速度急劇下降,迭代一次需要2個小時,而未加入非線性約束時迭代一次只需要2分鐘。想請教各位大神問題出在什么地方?
以下是非線性約束函數(shù)的代碼:
function [c,ceq]=mycon(x)
c=0.5097-(1-x(1))*x(2)-x(1)*(x(3)-x(5));
ceq=[];
以下是執(zhí)行ga命令的代碼:
LB=[0 0.22 0 0.1 0 0.1 0];
UB=[0.4 0.8 1 0.8 1 0.8 2];
options=gaoptimset('PopulationSize',30,'Generations',500,'PlotFcn',{@gaplotbestf,@gaplotbestindiv},'Display','iter');
[x,fval,exitflag,output,population,scores]=ga(@myfun,7,[],[],[],[],LB,UB,@mycon,options);
由于myfun函數(shù)較為復雜,故沒有在此附上。在未加入非線性約束時,優(yōu)化結果經過驗證是正確的。
返回小木蟲查看更多
今日熱帖
京公網(wǎng)安備 11010802022153號
求大神幫忙解答!
試試直接用消元
x1 = (0.5097 - x2) /(x5+x2-x3)
或者用罰函數(shù)來處理約束
計算速度下降猜測可能是大量的不可行隨機解導致了不斷的重新初始化,
可以嘗試打開并行計算,命令為'UseParallel', true