遗传算法加入非线性约束后计算速度急剧下降
各位大神,小弟在使用Matlab自带的遗传算法ga函数时,加入非线性约束之后计算速度急剧下降,迭代一次需要2个小时,而未加入非线性约束时迭代一次只需要2分钟。想请教各位大神问题出在什么地方?
以下是非线性约束函数的代码:
function [c,ceq]=mycon(x)
c=0.5097-(1-x(1))*x(2)-x(1)*(x(3)-x(5));
ceq=[];
以下是执行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函数较为复杂,故没有在此附上。在未加入非线性约束时,优化结果经过验证是正确的。
返回小木虫查看更多
今日热帖
京公网安备 11010802022153号
求大神帮忙解答!
试试直接用消元
x1 = (0.5097 - x2) /(x5+x2-x3)
或者用罚函数来处理约束
计算速度下降猜测可能是大量的不可行随机解导致了不断的重新初始化,
可以尝试打开并行计算,命令为'UseParallel', true