| 查看: 3791 | 回复: 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 大神帮我看看,问题出在哪里了,万分感谢。 |
» 猜你喜欢
遇见不省心的家人很难过
已经有16人回复
退学或坚持读
已经有25人回复
博士延得我,科研能力直往上蹿
已经有4人回复
免疫学博士有名额,速联系
已经有14人回复
面上基金申报没有其他的参与者成吗
已经有4人回复
多组分精馏求助
已经有6人回复

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













回复此楼