关于matlab多元非线性优化问题,大神来帮帮忙啊

  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

你的这个问题约束条件不对。

 

按照你给的变量范围,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文件传到网盘,然后贴出链接。
请尽量把问题描述清楚,减少无意义的互动。

温馨提示:答案为网友推荐,仅供参考