1、第六部分 MATLAB优化算法,一、线性规划算法 调用格式: x, fval, exitflag= linprog(f,A,b, Aeq,beq,lb,ub, x0)说明: 返回值x为最优解向量,fval为最优值; 若没有不等式约束,则令A= 、b= ; lb ,ub为变量x的下界和上界,x0为初值点; exitflag 描述函数计算的退出条件:若为正值,表示目标函数收敛于解x处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。,例1、求解线性规划问题 max f=70x1+120x2s.t 9x1+4x236004x1+5x220003x1+10x23000x1
2、,x20,将其转换为标准形式:min f=-70x1-120x2s.t 9x1+4x236004x1+5x220003x1+10x23000x1,x20 算法如下: f=-70 -120; A=9 4 ;4 5;3 10 ; b=3600;2000;3000; lb=0 0; ub=; x,fval,exitflag=linprog(f,A,b,lb,ub) maxf=-fval,例2、求解线性规划问题max f=0.15x1+0.1x2+0.08 x3+0.12 x4s.t x1-x2- x3- x40x2+ x3- x40x1+x2+x3+ x4=1xj0 , j=1,2,3,4,将其转换
3、为标准形式:min z=-0.15x1-0.1x2-0.08 x3-0.12 x4s.t x1-x2- x3- x40-x2- x3+ x40x1+x2+x3+ x4=1xj0 , j=1,2,3,4 算法如下: f = -0.15;-0.1;-0.08;-0.12; A = 1 -1 -1 -1;0 -1 -1 1; b = 0; 0; Aeq=1 1 1 1; beq=1; lb = zeros(4,1); x,fval,exitflag = linprog(f,A,b,Aeq,beq,lb) f=-fval,二、二次规划算法 调用格式:x,fval,exitflag=quadprog(H
4、,f,A,b,Aeq,beq,lb,ub,x0) 说明: 输出参数中,x是返回最优解;fval是返回解所对 应的目标函数值; 输入参数中,x0为初始点; 若无等式约束或无不等式约束,就将相应的矩阵和向量设置为空; exitflag是描述搜索是否收敛。,例3、求解二次规划问题min f(x)= x1-3x2+3x1+4x2 -2x1x2s.t 2x1+x22-x1+4x23 算法如下: f=1;-3; H=6 -2;-2 8; A=2 1;-1 4; b=2;3; x,fval,exitflag=quadprog(H,f,A,b),例4、求解二次规划问题min x1+2x2-2x1x2-4x1-
5、12x2s.t x1+x22-x1+2x22 2x1+x23x10, x20 算法如下: H=2 -2;-2 4; f=-4;-12; A=1 1;-1 2;2 1; b=2;2;3; lb=zeros(2,1); x,fval,exitflag=quadprog(H,f,A,b,lb),三、非线性规划算法 调用格式: x, fval, exitflag= fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon) 说明: 返回值x为最优解向量,fval是返回解所对应的目标函数值;exitflag是描述搜索是否收敛。 f为目标函数,x0为初始点,A,b为不等式约束的系数矩阵
6、和右端列向量, 若没有不等式约束,则令A= 、b= 。lb ,ub为变量x的下界和上界; nonlcon=fun,由M文件fun.m给定非线性不等式约束c (x) 0和等式约束g(x)=0。,例5、求解非线性规划问题min 100(x2-x1 ) +(1-x1)s.t x12;x22 首先建立ff6.m文件: function f=ff6(x) f=100*(x(2)-x(1)2)2+(1-x(1)2; 然后在命令窗口键入命令: x0=1.1,1.1; A=1 0;0 1; b=2;2; x,fval, exitflag=fmincon(ff6,x0,A,b),例6、求解非线性规划问题min
7、f=e (6x1 +3x2 +2x1x2+4x2+1)s.t x1x2-x1-x2+10-2x1x2-50 首先建立目标函数文件ff8.m文件: function f=ff8(x) f=exp(x(1)*(6*x(1)2+3*x(2)2+2*x(1)*x(2)+4*x(2)+1);,再建立非线性的约束条件文件:ff8g.m function c,g=ff8g(x)c(1)=x(1)*x(2)-x(1)-x(2)+1;c(2)=-2*x(1)*x(2)-5;g=; 然后在命令窗口键入以下命令: x0=1,1; nonlcon=ff8g; x, fval, exitflag =fmincon(ff
8、8,x0,nonlcon),四、整数线性规划算法 说明:下面给出用分枝定界法求解整数线性规划的M函数文件ILp.m,其中第一行是 function x, f = ILp(c,A,b,vlb,vub,x0, neqcstr,pre) 返回值x为最优解向量,f为最优值; x0为初值点,可以用 代替; neqcstr表示约束条件Ax b中的前neqcstr个是等式,neqcstr=0时可以省略,此时也可以省略x0; vlb ,vub为变量x的下界和上界; pre是精度。文件ILp.m单独给出,见WORD文档。,例7、求解整数规划问题max f=20x1+10x2s.t 5x1+4x2242x1+5x
9、213xj0 , i=1,2x1,x2 为整数 先建立M函数文件ILp.m,然后在MATLAB命令窗口键入: clear; c=-20,-10; %求max转换为求min a=5,4;2,5; b=24;13; x,f=ILp(c,a,b,0;0,inf; inf, ,0,0.0001) f=-f,五、0-1整数线性规划算法 说明:下面的隐枚举法求解01线性规划的M函数文件L01p_ie.m中用到命令B=de2bi(D),其作用是将十进制数向量D转换为相应的二进制数按位构成的以0,1为元素的矩阵B。 M函数文件 de2bi.m单独给出,见WORD文档。,说明:下面给出用隐枚举法求解01线性规划
10、的M函数文件L01p_ie.m,其中第一行是function x, f = L01p_ie(c,A,b,N) 返回值x为最优解向量,f为最优值; N表示约束条件Ax b中的前N个是等式,N =0时可以省略。 M函数文件L01p_ie.m单独给出,见WORD文档。,例8、求解01整数规划问题max f=-3x1+2x2-5x3s.t x1+x2-x32x1+4x2+x34x1+x234x2+x36xj, (j=1,2,3)为0或1 先建立M函数文件 de2bi.m和L01p_ie.m,然后在MATLAB命令窗口键入: clear; c=3,-2,5; %求max转换为求min a=1,2,-1;1,4,1;1,1,0;0,4,1; b=2;4;3;6; x, f = L01p_ie(c,a,b) f=-f,