线性规划(Linear Programming LP)问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。
在matlab中,线性规划的标准形式如下
{
A
x
≤
b
a
e
q
⋅
x
=
b
e
q
l
b
≤
x
≤
u
b
\begin{cases} Ax\le b \\ aeq·x=beq \\ lb\le x\le ub \end{cases}
⎩⎪⎨⎪⎧Ax≤baeq⋅x=beqlb≤x≤ub
它的标准形式求得都是最小值,若是最大值要转化为求最小值
matlab函数为
[x, fval] = linprog(f, A, b, aeq, beq, lb, ub, options)
这里的各参数对应上的公式,举个例子来说明
m
a
x
z
=
2
x
1
+
3
x
2
−
5
x
3
max\quad z=2x_1+3x_2-5x_3
maxz=2x1+3x2−5x3
{
x
1
+
x
2
+
x
3
=
7
2
x
1
−
5
x
2
+
x
3
≥
10
x
1
+
3
x
2
+
x
3
≤
12
x
1
,
x
2
,
x
3
≥
0
\begin{cases} x_1+x_2+x_3=7 \\ 2x_1-5x_2+x_3\ge 10 \\ x_1+3x_2+x_3\le 12 \\ x_1,x_2,x_3\ge 0 \end{cases}
⎩⎪⎪⎪⎨⎪⎪⎪⎧x1+x2+x3=72x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≥0
求解代码:
clc,clear;
f = [2; 3; -5];
a = [-2 5 -1; 1 3 1];
b = [-10; 12];
aeq = [1 1 1];
beq = 7;
lb = zeros(3, 1);
%//f取-f意为取反的最小值
[x, fval] = linprog(-f, a, b, aeq, beq, lb);
fprintf('x1=%.4f, x2=%.4f, x3=%.4f\nz=%.4f\n', x, -fval);
结果为:
x1=6.4286, x2=0.5714, x3=0.0000
z=14.5714