yx2001001
2009-03-06, 02:19
最简单的例子,
目标函数是
f=3*x(1)+2*x(2)+2.5*x(3)+12*x(4)+4*x(5)+5*x(6)+0.32*x(1)*x(7)。
限制是
0.2*x(1)+0.32*x(1)*x(7)+0.3*x(3)=1;
0.256*x(1)*x(7)+0.9*x(2)+0.4*x(3)=1.5;
0.32*x(1)*x(7)+0.88*x(4)+0.3*x(6)=2;
0.256*x(1)*x(7)+0.064*x(4)+0.9*x(5)+0.4*x(6)=5;
我是参照HELP中的问题来编的程序
function f=objfun(x)
f=3*x(1)+2*x(2)+2.5*x(3)+12*x(4)+4*x(5)+5*x(6)+0.32*x(1)*x(7)
function [c,ceq]=confun(x)
c=[];
ceq=[0.2*x(1)+0.32*x(1)*x(7)+0.3*x(3)-1;
0.256*x(1)*x(7)+0.9*x(2)+0.4*x(3)-1.5;
0.32*x(1)*x(7)+0.88*x(4)+0.3*x(6)-2;
0.256*x(1)*x(7)+0.064*x(4)+0.9*x(5)+0.4*x(6)-5];
然后在命令窗口执行
x0=[4,0.5,0,0,3,2.5,0.1];
lb=[0,0,0,0,0,0,0];
ub=[10,5,10,10,5,10,1];
options=optimset('Algorithm','active-set');
[x,fval] = fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options)
得出的结果完全不对,x=[1.5,0,0,0,3,2.5,0.1]
和初始值没什么区别,而且完全不符合设置的限制。
我觉得是我设置的限制confun有问题,没有利用上。
请各位大大指点,不胜感激。
目标函数是
f=3*x(1)+2*x(2)+2.5*x(3)+12*x(4)+4*x(5)+5*x(6)+0.32*x(1)*x(7)。
限制是
0.2*x(1)+0.32*x(1)*x(7)+0.3*x(3)=1;
0.256*x(1)*x(7)+0.9*x(2)+0.4*x(3)=1.5;
0.32*x(1)*x(7)+0.88*x(4)+0.3*x(6)=2;
0.256*x(1)*x(7)+0.064*x(4)+0.9*x(5)+0.4*x(6)=5;
我是参照HELP中的问题来编的程序
function f=objfun(x)
f=3*x(1)+2*x(2)+2.5*x(3)+12*x(4)+4*x(5)+5*x(6)+0.32*x(1)*x(7)
function [c,ceq]=confun(x)
c=[];
ceq=[0.2*x(1)+0.32*x(1)*x(7)+0.3*x(3)-1;
0.256*x(1)*x(7)+0.9*x(2)+0.4*x(3)-1.5;
0.32*x(1)*x(7)+0.88*x(4)+0.3*x(6)-2;
0.256*x(1)*x(7)+0.064*x(4)+0.9*x(5)+0.4*x(6)-5];
然后在命令窗口执行
x0=[4,0.5,0,0,3,2.5,0.1];
lb=[0,0,0,0,0,0,0];
ub=[10,5,10,10,5,10,1];
options=optimset('Algorithm','active-set');
[x,fval] = fmincon(@objfun,x0,[],[],[],[],lb,ub,@confun,options)
得出的结果完全不对,x=[1.5,0,0,0,3,2.5,0.1]
和初始值没什么区别,而且完全不符合设置的限制。
我觉得是我设置的限制confun有问题,没有利用上。
请各位大大指点,不胜感激。