[已解决] 遗传算法加入非线性约束后计算速度急剧下降

[复制链接]
brucexmc 发表于 2021-3-2 19:45:10
各位大神,小弟在使用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函数较为复杂,故没有在此附上。在未加入非线性约束时,优化结果经过验证是正确的。

最佳答案


maple1314168 发表于 2021-3-3 15:19:23
1、目标函数太复杂?
2、只有7个变量,迭代500次,应该不会这么久吧?
3。改改
function [c,ceq]=mycon(x)
c=0.5097-(1-x(1)).*x(2)-x(1).*(x(3)-x(5));
ceq=[];
目标函数也改改为向量的函数。
4、ga的设置,可以选择并行计算的。
回复此楼

3 条回复


maple1314168 发表于 2021-3-3 15:19:23
1、目标函数太复杂?
2、只有7个变量,迭代500次,应该不会这么久吧?
3。改改
function [c,ceq]=mycon(x)
c=0.5097-(1-x(1)).*x(2)-x(1).*(x(3)-x(5));
ceq=[];
目标函数也改改为向量的函数。
4、ga的设置,可以选择并行计算的。
回复此楼

brucexmc 发表于 2021-3-3 15:45:55
maple1314168 发表于 2021-3-3 15:19
1、目标函数太复杂?
2、只有7个变量,迭代500次,应该不会这么久吧?
3。改改

非常感谢您的解答,我试着改一下程序并进行并行运算,看看效果怎么样。

小陸 发表于 2021-4-8 14:29:50
如果希望快点,你可以用 fmicon,不一定要用ga
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表