线性规划LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:
min f(x)
s.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处的值。
实例1
程序
clc;
clear all;
c = [2;3;1];
a = [1, 4,2;3,2,0];
b = [8;6];
[x,y] = linprog(c,-a,-b,[],[],zeros(3,1))
%%因为没有等号约束条件,所以为空矩阵
运行结果
实例2
程序
clc;
clear all;
c = [5;4;6];
a = [1,-1,1;3,2,4;3,2,0];
b = [20,42,30];
[x,cval,exitflag,putput,lambda] = linprog(-c,a,b,[],[],zeros(3,1))
运行方式
实例3
程序
clc;
clear all;
c = [0;0;0;1.6;1.2;1.4];
A = [0 1 0 0 0 0;0 0 0 1 0 0;0 0 0 0 0 0];
b = [200000;250000;150000];
aeq = [1 1 0 0 0 0;-1.2 0 1 1 0 0;0 -1.5 -1.2 0 1 1];
beq = [400000;0;0];
d = zeros(6,1);
[x,y] = linprog(-c,A,b,aeq,beq,d);
fprintf('x11=%.4f, x12=%.4f, x21=%.4f\r\n',x(1:3,1));
fprintf('x23=%.4f ,x31=%.4f, x34=%.4f\r\n',x(4:6,1));
fprintf('\r\nz=%.4f\r\n', -y);
运行结果