24小时热门版块排行榜    

查看: 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


大神帮我看看,问题出在哪里了,万分感谢。
回复此楼

» 猜你喜欢

世上无难事。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

laoyeye2

木虫 (小有名气)

首先非常感谢小木虫里面的“文刀星 ”,他的回复很好的解决了我的问题。以下为回复:
遇到这种问题的时候,第一,看看自己的约束函数有没有写错,如果是约束错了,当然就找不到满足约束的点啦。你随便把一个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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 laoyeye2 的主题更新
信息提示
请填处理意见