例题:
求解线性规划问题
max
z
=
2
x
1
+
3
x
2
−
5
x
3
\max z = 2x_1+3x_2-5x_3
maxz=2x1+3x2−5x3
s
.
t
.
s.t.
s.t.
x
1
+
x
2
+
x
3
=
7
x_1+x_2+x_3=7
x1+x2+x3=7
2
x
1
−
5
x
2
+
x
3
≥
10
2x_1-5x_2+x_3≥10
2x1−5x2+x3≥10
x
1
+
3
x
2
+
x
3
≤
12
x_1+3x_2+x_3≤12
x1+3x2+x3≤12
x
1
,
x
2
,
x
3
≥
0
x1,x2,x3≥0
x1,x2,x3≥0
解:
1.原理
(s.t.意思是约束条件)
首先要知道的是线性规划的MATLAB标准模板是下图所示。
其中,x、c、b、beq、lb、ub是列向量;
A、Aeq是矩阵;
fval是价值向量。
所需要的做的就是把题目转化成标准型。MATLAB公式只能求最小值,模板中也是小于等于号,所以对应的,如果要求最大值,就需要加负号调整。
MATLAB中求解线性规划的命令为下图所示
其中,x返回的是决策向量的取值,fval返回的是目标函数的最优值;
c为价值向量,A、b对应的是线性不等式约束;
Aeq、beq对应的是线性等式约束;
lb、ub分别对应的是决策向量的下届向量和上界向量。
2.代码
f = [-2;-3;5];
a=[-2,5,-1;1,3,1];b=[-10;12];
aeq=[1,1,1];beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
x,y=-y
下边是一个我的错误点,需要注意。
3.结果
返回值的含义是:
当
x
1
=
6.4286
,
x
2
=
0.5714
,
x
3
=
0
x_1=6.4286,x_2=0.5714,x_3= 0
x1=6.4286,x2=0.5714,x3=0时,有最优解
y
=
14.5714
y=14.5714
y=14.5714
(注:本题出自b站BV1kC4y1a7Ee的P3)