LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. A·x b Aeq·x=beq vlb x vub其中 ,b,beq均为向量,A,Aeq为矩阵,x为向量变量.矩阵A和向量b是线性不等式约束条件的系数,
Aeq和beq是等式
约束条件
的系数.
在MATLAB中,用于LP的求解函数为linprog.其调用格式为:[x,fval,lambda]=linprog(f,A,b,Aeq,beq,vlb,vub,x0,options)其中f,A,b,是不可缺省的输入变量,x是不可缺省的输出变量,它是问题的解.vlb,vub均是向量,分别表示x的下界和上界,x0为x的起始点,options为optimset函数中定义的参数的值,fval是目标函数在解x处的值,lambda为在解x处的lagrange乘子.lambda.lower对应于vlb,lambda.upper对应于ulb,lambda.ineqlin是对应于线性不等式约束的,lambda.eqlin是对应于线性等式约束的.
例子1
>>% 求解下列线性规划问题 % max z=2x1+3x2-5x3 % s.t. x1+x2+x3=7 % 2x1-5x2+x3>=10 % x1+3x2+x3<=12 % x1,x2,x3>=0 f=[2;3;-5];%目标函数列矩阵 A=[-2,5,-1;1,3,1];%不等矩阵 b=[-10;12]; Aeq=[1,1,1];%相等矩阵 beq=7; x=linprog(-f,A,b,Aeq,beq,zeros(3,1)); %zeros(m,n)产生m×n的double类零矩阵,zeros(n)产生n×n的全0方阵 value=f‘*x%目标值,其值等于[x,y]=linprog(-f,A,b,Aeq,beq,zeros(3,1))的-y Optimization terminated. value = 14.5714 >> x x = 6.4286 0.5714 0.0000 >>
例子2
>> % 求解下列线性规划问题 % min z=2x1+3x2+x3 % s.t. x1+4x2+2x3>=8 % 3x1+2x2>=6 % x1,x2,x3>=0 f=[2;3;1]; A=[-1,-4,-2;-3,-2,0]; b=[-8;-6]; x=linprog(f,A,b,[],[],zeros(3,1))%无等式,用[]代替 value=f‘*x %其值等于[x,y]=linprog(f,A,b,[],[],zeros(3,1))的y Optimization terminated. x = 0.8066 1.7900 0.0166 value = 7.0000 >>
例子3
% min z=|x1|+2|x2|+3|x3|+4|x4|; % s.t. x1-x2-x3+x4=0; % x1-x2+x3-3*x4=1; % x1-x2-2*x3+3*x4=-0.5 %目标函数 objfun[email protected](x)abs(x(1))+2*abs(x(2))+3*abs(x(3))+4*abs(x(4)) %等式约束 Aeq=[1 -1 -1 1 1 -1 1 –3 1 -1 -2 3]; beq=[0 1 -0.5]‘; x0=[0 0 0 0];%给一个初值 很关键 和很重要哦 x=fmincon(objfun,x0,[],[],Aeq,beq) %下面是根据的需要改进的程序 min z=[1 2 3 4 1 2 3 4]*[u1 u2 u3 u4 v1 v2 v3 v4]‘ s.t. A=[1 -1 -1 1 1 -1 -1 1 1 -1 1 -3 1 -1 1 –3 1 -1 -2 3 1 -1 -2 3] x=[u1 u2 u3 u4 v1 v2 v3 v4]‘ b=[0 1 -0.5]‘ Ax=b x>=0 %目标函数 f=[1 2 3 4 1 2 3 4]; %等式约束 Aeq=[1 -1 -1 1 1 -1 -1 1 1 -1 1 -3 1 -1 1 –3 1 -1 -2 3 1 -1 -2 3]; beq=[0 1 -0.5]‘; %边界条件 lb=zeros(8,1); %调用linprog x=linprog(f,[],[],Aeq,beq,lb) Optimization terminated. x = 0.2500 0.0000 0.2500 0.0000 0.2500 0.0000 0.2500 0.0000
时间: 2024-10-11 07:36:19