线性规划:约束条件和目标函数都是线性的。简单点说,所有的决策变量在目标函数和约束条件中都是一次方。
Matlab函数:
[x, value] = linprog(func, A, b, Aeq, beq ,lb, ub);
参数解释:
Matlab中线性规划的标准形式:
min
x
c
T
x
\min_x c^Tx
xmincTx
s
.
t
.
{
A
x
⩽
b
A
e
q
⋅
x
=
b
e
q
l
b
⩽
x
⩽
u
b
s.t. {Ax⩽bAeq⋅x=beqlb⩽x⩽ub
s.t.⎩
⎨
⎧Ax⩽bAeq⋅x=beqlb⩽x⩽ub
注意:
步骤:按照数模题目进行建模,得到目标函数和约束条件,然后把目标函数和约束条件化为标准形式,再化成matlab里面矩阵形式,再填入代码中。
目标函数和约束条件:
m
a
x
z
=
x
1
+
x
2
−
3
x
3
max\quad z=x_1+x_2-3x_3
maxz=x1+x2−3x3
s
.
t
.
{
x
1
+
x
2
+
x
3
=
6
x
1
−
x
2
≥
2
x
1
+
x
2
−
2
x
3
≤
5
x
1
,
x
2
,
x
3
≤
15
s.t. {x1+x2+x3=6x1−x2≥2x1+x2−2x3≤5x1,x2,x3≤15
s.t.⎩
⎨
⎧x1+x2+x3=6x1−x2≥2x1+x2−2x3≤5x1,x2,x3≤15
根据Matlab标准化后的目标函数和约束条件:
m
i
n
w
=
−
x
1
−
x
2
+
3
x
3
min\quad w=-x_1-x_2+3x_3
minw=−x1−x2+3x3
s
.
t
.
{
x
1
+
x
2
+
x
3
=
6
−
x
1
+
x
2
+
0
∗
x
3
≤
−
2
x
1
+
x
2
−
2
x
3
≤
5
x
1
,
x
2
,
x
3
≤
15
s.t. {x1+x2+x3=6−x1+x2+0∗x3≤−2x1+x2−2x3≤5x1,x2,x3≤15
s.t.⎩
⎨
⎧x1+x2+x3=6−x1+x2+0∗x3≤−2x1+x2−2x3≤5x1,x2,x3≤15
约束条件矩阵化:
(
1
−
1
0
1
1
−
2
)
(
x
1
x
2
x
3
)
≤
(
−
2
5
)
\left(\begin {array}{c} 1 &-1 &0 \\ 1 &1 &-2 \\ \end{array}\right) \left(\begin {array}{c} x_1\\ x_2\\ x_3\\ \end{array}\right) \leq \left(\begin {array}{c} -2\\ 5\\ \end{array}\right)
(11−110−2)
x1x2x3
≤(−25)
[
1
1
1
]
⋅
[
x
1
x
2
x
3
]
T
=
6
\left[\begin {array}{c} 1&1&1 \end{array}\right] \cdot {\left[\begin {array}{c} x_1&x_2&x_3 \end{array}\right]}^T=6
[111]⋅[x1x2x3]T=6
[
x
1
x
2
x
3
]
T
≤
[
15
15
15
]
T
{\left[\begin {array}{c} x_1&x_2&x_3 \end{array}\right]}^T\leq{\left[\begin {array}{c} 15&15&15 \end{array}\right]}^T
[x1x2x3]T≤[151515]T
Matlab代码:
func=[-1;-1;3];
A=[1,-1,0;1,1,-1];
b=[-2;5];
aeq=[1,1,1]
beq=6;
ub=[15;15;15];
[x,value]=linprog(func,A,b,aeq,beq,[],ub);
结果:
>> x
x =
-9.5000
15.0000
0.5000
>> value
value =
-4