24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1182  |  回复: 3
【悬赏金币】回答本帖问题,作者brucexmc将赠送您 40 个金币

brucexmc

新虫 (正式写手)

[求助] 遗传算法加入非线性约束后计算速度急剧下降已有2人参与

各位大神,小弟在使用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函数较为复杂,故没有在此附上。在未加入非线性约束时,优化结果经过验证是正确的。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

brucexmc

新虫 (正式写手)

求大神帮忙解答!
2楼2021-03-03 15:42:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

TX灌水员

木虫 (小有名气)

【答案】应助回帖

试试直接用消元
x1 = (0.5097 - x2) /(x5+x2-x3)
或者用罚函数来处理约束

计算速度下降猜测可能是大量的不可行随机解导致了不断的重新初始化
3楼2021-03-08 22:45:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Hubobit

银虫 (小有名气)

【答案】应助回帖

可以尝试打开并行计算,命令为'UseParallel', true
空谈误国,实干兴邦
4楼2021-08-10 16:30:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 brucexmc 的主题更新
不应助 确定回帖应助 (注意:应助才可能被奖励,但不允许灌水,必须填写15个字符以上)
信息提示
请填处理意见