关于matlab多元非线性优化问题,大神来帮帮忙啊
A=[10-150;010-70];b=[0;0];vub=[900;1000;30;30];vlb=[500;500;5;5];[x,fval,exitflag,out...
A=[1 0 -15 0;0 1 0 -70];
b=[0;0];
vub=[900;1000;30;30];
vlb=[500;500;5;5];
[x,fval,exitflag,output,lambda,grad,hession]=fmincon('funn',x0,A,b,[],[],vlb,vub,'nonlin')
目标函数function y=funn(x)
y=x(1)*x(3)+x(2)*x(4)
非线性约束条件
function [c,y]=nonlin(x)
c(1) = -0.01*x(2)*x(4)+2500;
c(2)=-x(2)*(x(1)*x(3)+x(2)*x(4)/6+(1+(20-2*x(1)*x(3))/(20+x(2)*x(4))))+90000
y=[];
结果为
x =
1.0e+003 *
0.5660 1.0985 0.0130 0.1285
fval =
1.4847e+005
exitflag =
-2
那个结果得到的x超出vub上限了呢?
非线性约束条件是两个不等式
-0.01*x(2)*x(4)<=-2500
-x(2)*(x(1)*x(3)+x(2)*x(4)/6+(1+(20-2*x(1)*x(3))/(20+x(2)*x(4))))<=-90000 展开
b=[0;0];
vub=[900;1000;30;30];
vlb=[500;500;5;5];
[x,fval,exitflag,output,lambda,grad,hession]=fmincon('funn',x0,A,b,[],[],vlb,vub,'nonlin')
目标函数function y=funn(x)
y=x(1)*x(3)+x(2)*x(4)
非线性约束条件
function [c,y]=nonlin(x)
c(1) = -0.01*x(2)*x(4)+2500;
c(2)=-x(2)*(x(1)*x(3)+x(2)*x(4)/6+(1+(20-2*x(1)*x(3))/(20+x(2)*x(4))))+90000
y=[];
结果为
x =
1.0e+003 *
0.5660 1.0985 0.0130 0.1285
fval =
1.4847e+005
exitflag =
-2
那个结果得到的x超出vub上限了呢?
非线性约束条件是两个不等式
-0.01*x(2)*x(4)<=-2500
-x(2)*(x(1)*x(3)+x(2)*x(4)/6+(1+(20-2*x(1)*x(3))/(20+x(2)*x(4))))<=-90000 展开
1个回答
展开全部
你的这个问题约束条件不对。
按照你给的变量范围,x2<=1000, x4<=30,那么-0.01*x(2)*x(4)>=-300,无法满足<=-2500的条件,所以根本找不到可行解。
你在上个问题中的第一个约束条件最右边的常数是220,不知道为什么这里变成了2500.
再考虑到还有Ax<=b构成的线性不等式约束,即使把上面的2500改成220,也无法找到可行解。因为该线性不等式的第一个就是x1-15*x3<=0,而x1最小值为500,x3最大值为30,不等式根本不可能满足。
优化问题并非随便一写就交给软件去计算的,而是需要对问题进行一定的分析,至少应该构造出一组初始可行解来才行。至于优化的结果,也应该根据exitflag判断是否优化成功,如果失败,可以大致知道原因,例如-2就代表找不到可行解(No feasible point was found),这种情况下,就应该好好检查约束条件是否合理。
追问
我把题目给你 你帮我改改吧?怎么样?
还是很谢谢你啊 算2500的时候忘了一个系数 我再试试
追答
把题目贴出来吧,我看看。
如果受字数限制,或者排版不方便,可以整理成word文件传到网盘,然后贴出链接。
请尽量把问题描述清楚,减少无意义的互动。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询