数 学 模 型 最 优 化 方 法 实 现 数学与计算机科学学院 2007年3月
一、线性规划模型
线性规划模型:min (max)z=c’x s.t. AX<=b 其中C为价格向量。A为约束条件的系数矩阵,b为约束条件的右侧常数。 最优化模型还有二次规划、非线性规划等。
二、求解线性规划:min z=c’x s.t. AX<=b x>=0 用matlab采用矩阵方法求解,但要转化为上述形式,输入格式如下: 1.x=lp(c,A,b)---注:此模型无非负条件 2.x=lp(c,A,b,xlb,xub)----模型中加上条件:xlb<=x<=xub 3.x=lp(c,A,b,xlb,xub,x0,nEq)—其中nEq表示Ax<=b中前n个约束为等式
例1. Min z=6x1+3x2+4x3 s.t. x1+x2+x3=120 x1≥30;0≤x2≤50;x3≥20 用matlab软件求解如下: C=[6;3;4];A=[1 1 1];b=[120]; Xlb=[30;0;20];xub=[inf;50;inf]; X0=30*ones(3,1);nEq=1; X=lp(c,A,b,xlb,xub,x0,nEq) X=30.0000 50.0000 40.0000 f=c’*x
二、二次规划模型:标准型如下 min z=0.5*X’HX+C’X s.t. AX≤b X≥0 用matlab求解,其输入格式如下: 1. x=QP(H,C,A,b) 2. X=QP(H,C,A,b,vlb,vub) 3. X=QP(H,C,A,b,vlb,vub,x0) 4. X=QP(H,C,A,b,vlb,vub,x0,N) N表示前N个等式约束的数目
例2. min f(x1, x2) = -2x1-6x2+x12-2x1x2+2x22 s. t 例2. min f(x1, x2) = -2x1-6x2+x12-2x1x2+2x22 s.t. x1+x2≤2 -x1+2x2≤2 x1≥0, x2≥0 H=[2 –2; -2 4]; c=[-2 –6]; A=[1 1; -1 2]; b=[2 2] x=QP(H, c, A, b) x=0.8000 1.2000 0.5*x’*H*x+c*x
三、无约束极小化问题 Matlab提供了求解最优化的函数fmin( )和fmins( ),它们分别对应于单变量和多变量的最优化问题的求解,其调用格式如下: X=fmin(函数名,初值,选项) 其中函数名的定义和其他函数一致,而初值往往能决定最后解的精度和收敛速度。选项要根据实际问题来决定,查看选项的内容只需用命令 help foptions(共有18种)
1. 一元非线性函数的极小化: 基本的输入格式为:x=fmin(‘F’,x1,x2) 其中F表示极小化的函数, 例3. min f =2exp(-x)*sin(x) s.t. 2 < x < 5 用Matlab 求解如下: f=‘2*exp(-x).*sin(x)’; fplot( f, [0, 8] ); 作图语句 xmin=fmin( f , 2 , 5)
f1=‘-2*exp(-x).*sin(x)’; xmax = fmin( f1 , 0 , 3) xmax=0.7854 x=xmin; ymin=evalf( f ) ymin=-0.0279 x=xmax; ymax=evalf( f ) ymax=0.6448
2. 多元函数的极小化问题: x=fmins(‘f ’, x0) x=fmins(‘f ’,x0,options) 例4. Min f=100 (x2-x12)2 + (1-x1)2 其中初值为x0 = (-1.2 , 1) 首先编写M—文件myfun.m function y = myfun(x ) y=100*(x(2)-x(1)^2)^2+(1-x(1))^2; 然后由下面的命令求解该问题:
x0=[-1.2 1]; x=fmins(‘myfun’,x0) ans = 1.1115e-09 另外一个命令是fminu( ), 其默认算法是BFGS拟Newton法,但函数一定要以M--文件形式输入, 输入格式为: x=fminu(‘fun’, x0, options)
用matlab求解上述问题,分两步: 首先建立函数M—文件: function [F, G] =fun( x ) 四、有约束的非线性规划问题: 标准型: min F(x) s.t. G(x) ≤zeros(G) ; vlb≤x≤vub 其中G(x)为m维非线性函数向量, zeros(G)为m维零向量;不等式中允许含等式约束,输出目标函值及约束函数值: [f, g] = fun( x ) 用matlab求解上述问题,分两步: 首先建立函数M—文件: function [F, G] =fun( x )
2) x=constr(‘fun’,x0,options,vlb,vub) G=[函数1;函数2;….;函数m]; 2. 运行的基本格式如下: 1) x=constr(‘fun’, x0) 2) x=constr(‘fun’,x0,options,vlb,vub) 例5. min (x1-2)2+(x2-1)2 s.t. x1-2x2+1=0; 0.25*x12 + x22 -1≤0; 用matlab输入求解如下:
xl=[-inf ; -inf ]; xu=[inf ; inf ]; 建立M--文件: function [F,G] =myfun1(x) x0=[2 ; 2]; options(13) =1; xl=[-inf ; -inf ]; xu=[inf ; inf ]; 建立M--文件: function [F,G] =myfun1(x) F=(x(1)-2)^2+(x(2)-1)^2; G(1)=x(1) -2*x(2) +1; G(2)=0.25*x(1)^2 +x(2)^2 -1; 运行: [x,options] = constr(‘myfun1’, x0,options, xl, xu)
x=0.8229 0.9114 myfun1( x ) ans =1.3935 (目标函数值) 例6: 求解 min f(x)=ex1 (4x12+2x22+4x1x2+2x2+1) s.t. x1x2-x1-x2≤-1.5; x1x2≥-10; Step1: 编制M—文件myfun2.m: function [f , g]=myfun2(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+ 4*x(x)*x(2)+2*x(2)+1);
g(1)=1.5+x(1)*x(2) -x(1) -x(2); g(2) = -x(1)*x(2) -10; Step2: 计算最优化点和最优值 x0=[-1 , 1]; x=constr(‘myfun2’, x0) x=-9.5474 1.0474 [f , g]= myfun2(x) f = 0.0236 g=1.0e-015*[-0.8882 0]
谢 谢 大 家 祝你们成功