| 查看: 3781 | 回复: 1 | ||
laoyeye2木虫 (小有名气)
|
[求助]
matlab中用ga 多目标优化求解最小值
|
|
求助: %目标函数 function f = my_first_multi2(x) f=28.44-4.02583*x(1)-1.69425*x(2)+1.61083*x(3)+3.73125*x(4)+0.040375*x(1)*x(2)+0.055625*x(1)*x(3)-0.10937*x(1)*x(4)-0.008375*x(2)*x(3)-0.050375*x(2)*x(4)-0.10062*x(3)*x(4)+0.21031*x(1)^2+0.026363*x(2)^2 +0.0028125*x(3)^2+0.026563*x(4)^2; %约束函数 function [c,ceq]=ga_con1(x) c=[-2.11833+0.955422*x(1)+0.105*x(2)-0.81042*x(3)+0.3075*x(4)+0.080625*x(1)*x(2)-0.51688*x(1)*x(3)+0.28563*x(1)*x(4)-0.15338*x(2)*x(3)+0.10562*x(2)*x(4)-0.58938*x(3)*x(4)-0.014896*x(1)^2-0.000254*x(2)^2 +0.67885*x(3)^2+0.1476*x(4)^2-5]; ceq=[]; 求解代码: FitnessFunction=@ my_first_multi2; lb=[4 15 4 5]; ub=[8 35 8 9]; [x,fval] = ga(FitnessFunction,4,[],[],[],[],lb,ub,@ga_con1) 最后出现的问题:Optimization terminated: no feasible point found. x = 4 15 4 5 大神帮我看看,问题出在哪里了,万分感谢。 |
» 猜你喜欢
Materials Today Chemistry审稿周期
已经有4人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有3人回复
参与限项
已经有3人回复
假如你的研究生提出不合理要求
已经有7人回复
实验室接单子
已经有4人回复
全日制(定向)博士
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复

laoyeye2
木虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1705.1
- 散金: 3100
- 红花: 3
- 帖子: 255
- 在线: 86.9小时
- 虫号: 2570930
- 注册: 2013-07-29
- 性别: GG
- 专业: 机械工程
|
首先非常感谢小木虫里面的“文刀星 ”,他的回复很好的解决了我的问题。以下为回复: 遇到这种问题的时候,第一,看看自己的约束函数有没有写错,如果是约束错了,当然就找不到满足约束的点啦。你随便把一个x=[4 15 4 5];代入你的约束函数计算,会发现,本来你的约束只有一个,但是返回的却是两个约束值!!!当然就是约束有问题了。问题的产生在于你写约束函数的格式或者说习惯很不好造成的。c=[...]的写法很不好,只要里面符号之间多了一个空格,那就多了一个约束,而且不是你想要的约束,你可以查查看,在0.000254*x(2)^2 +0.67885*x(3)^2的+号前多了一个空格,使得你的约束由一变二。最好这样写:function [c,ceq]=ga_con1(x)c=zeros(1,1);%多个约束的时候c=zeros(N,1),然后c(1)=...;c(2)=...;等等c(1)=-2.11833+0.955422*x(1)+0.105*x(2)-... 0.81042*x(3)+0.3075*x(4)+0.080625*x(1)*x(2)-0.51688*x(1)*x(3)+... 0.28563*x(1)*x(4)-0.15338*x(2)*x(3)+0.10562*x(2)*x(4)-... 0.58938*x(3)*x(4)-0.014896*x(1)^2-0.000254*x(2)^2+... 0.67885*x(3)^2+0.1476*x(4)^2-5;ceq=[];式子太长的时候,可以在符号的后面加三个点,然后回车在下面写,这样好看些,便于检查。记得是在符号的后面加,在前面加的话,某些情况也会出现由一生二的情况!! |

2楼2015-12-02 13:36:40












回复此楼