MATLAB 线性规划

  • Post author:
  • Post category:其他



✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。

🍎个人主页:

小嗷犬的个人主页


🍊个人网站:

小嗷犬的技术小站


🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。





什么是线性规划问题


线性规划问题

是指在一组

线性不等式约束条件

下,求解一个

线性目标函数

的最大值或最小值的问题。




如何使用 MATLAB 解决线性规划问题

常见的线性规划问题通常类似于以下形式:





max

Z

=

4000

x

1

+

3000

x

2

\begin{equation} \max \quad Z=4000 x_{1}+3000 x_{2} \end{equation}















max






Z




=




4000



x











1





















+




3000



x











2



































































s.t. 

{

2

x

1

+

x

2

10

x

1

+

x

2

8

x

2

7

x

1

,

x

2

0

\begin{equation} \text { s.t. } \begin{cases} & 2 x_{1}+x_{2} \leq 10 \\ & x_{1}+x_{2} \leq 8 \\ & x_{2} \leq 7 \\ & x_{1}, x_{2} \geq 0 \end{cases} \end{equation}
















s.t.























































































































2



x











1





















+





x











2


























10









x











1





















+





x











2


























8









x











2


























7









x











1



















,





x











2


























0
































































其中,公式1为目标函数,公式2为约束条件。

为了便于求解,我们可以将公式1和公式2分别写成矩阵形式:





max

Z

=

[

4000

3000

]

[

x

1

x

2

]

\begin{equation} \max \quad Z=\begin{bmatrix} 4000 & 3000 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix} \end{equation}















max






Z




=






[













4000





























3000




















]













[














x











1


























x











2





































]




















































s.t. 

{

[

2

1

1

1

0

1

]

[

x

1

x

2

]

[

10

8

7

]

x

1

,

x

2

0

\begin{equation} \text { s.t. } \left\{ \begin{array}{} \begin{bmatrix} 2 & 1 \\ 1 & 1 \\ 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix} \leq \begin{bmatrix} 10 \\ 8 \\ 7 \end{bmatrix} \\ x_{1}, x_{2} \geq 0 \end{array} \right. \end{equation}
















s.t.



















































































































2








1








0





























1








1








1























































[














x











1


























x











2





































]
















































10








8








7





















































x











1



















,





x











2


























0


































































为了统一最大目标函数问题和最小目标函数问题,我们将目标函数的符号取反,即:





min

Z

=

[

4000

3000

]

[

x

1

x

2

]

\begin{equation} \min \quad -Z=\begin{bmatrix} -4000 & -3000 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix} \end{equation}















min









Z




=






[
















4000
































3000




















]













[














x











1


























x











2





































]














































公式5和公式4这种形式就满足 MATLAB 线性规划的标准形式:





min

x

f

T

x

 such that 

{

A

x

b

,

A

e

q

x

=

b

e

q

,

l

b

x

u

b

\min _{x} f^{T} x \text { such that } \left\{ \begin{array}{c} A \cdot x \leq b, &\\ { Aeq } \cdot x={ beq }, &\\ l b \leq x \leq u b & \end{array} \right.















x









min




















f











T










x



such that














































































A









x









b


,









A


e


q










x




=





b


e


q



,








l


b









x









u


b


































































其中,



f

T

x

f^{T}x







f











T










x





为目标函数,

A

为约束条件的系数矩阵,

b

为约束条件的常数项,

Aeq

为等式约束条件的系数矩阵,

beq

为等式约束条件的常数项,

lb

为变量的下界,

ub

为变量的上界。

问题转换成标准形式后,我们就可以使用 MATLAB 的

linprog

函数来求解了。


linprog

函数的语法为:

[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)

其中,

x

为求解得到的最优解,

fval

为最优解对应的目标函数值。

最开始的问题就可以用以下代码解决:

f = [-4000 -3000];
A = [2 1; 1 1; 0 1];
b = [10; 8; 7];
lb = [0; 0];

[x, fval] = linprog(f, A, b, [], [], lb, []);
fval = -fval; % 因为目标函数取反了,所以这里要取反

最后得出的结果为:

x =
    2.0000
    6.0000

fval =
    26000



附加题

让我们运用上文的方法求解以下线性规划问题:





max

Z

=

2

x

1

+

3

x

2

+

4

x

3

\begin{equation} \max \quad Z=2 x_{1}+3 x_{2} + 4 x_{3} \end{equation}















max






Z




=




2



x











1





















+




3



x











2





















+




4



x











3



































































s.t. 

{

2

x

1

+

x

2

+

3

x

3

36

x

1

+

x

2

8

x

1

+

x

3

10

x

1

+

x

2

x

3

=

4

x

1

,

x

2

,

x

3

0

\begin{equation} \text { s.t. } \left\{ \begin{array}{c} 2 x_{1}+x_{2}+3x_{3} \leq 36 &\\ x_{1}+x_{2} \geq 8 &\\ x_{1}+x_{3} \geq 10 &\\ x_{1}+x_{2}-x_{3} = 4 &\\ x_{1}, x_{2}, x_{3} \geq 0 & \end{array} \right. \end{equation}
















s.t.














































































2



x











1





















+





x











2





















+




3



x











3


























36









x











1





















+





x











2


























8









x











1





















+





x











3


























10









x











1





















+





x











2



























x











3





















=




4









x











1



















,





x











2



















,





x











3


























0





















































































































首先,我们将问题转换成标准形式:





min

Z

=

[

2

3

4

]

[

x

1

x

2

x

3

]

\begin{equation} \min \quad -Z=-\begin{bmatrix} -2 & -3 & -4 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \end{bmatrix} \end{equation}















min









Z




=











[
















2
































3
































4




















]

















































x











1


























x











2


























x











3















































































































s.t. 

{

[

2

1

3

1

1

0

1

0

1

]

[

x

1

x

2

x

3

]

[

36

8

10

]

[

1

1

1

]

[

x

1

x

2

x

3

]

=

[

4

]

x

1

,

x

2

,

x

3

0

\begin{equation} \text { s.t. } \left\{ \begin{array}{c} \begin{bmatrix} 2 & 1 & 3 \\ -1 & -1 & 0 \\ -1 & 0 & -1 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \end{bmatrix} \leq \begin{bmatrix} 36 \\ -8 \\ -10 \end{bmatrix} &\\ \begin{bmatrix} 1 & 1 & -1 \end{bmatrix} \cdot \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \end{bmatrix} = \begin{bmatrix} 4 \end{bmatrix} &\\ x_{1}, x_{2}, x_{3} \geq 0 & \end{array} \right. \end{equation}
















s.t.



















































































































2











1











1





























1











1








0





























3








0











1



























































































x











1


























x











2


























x











3











































































































36











8











10






















































[













1





























1
































1




















]

















































x











1


























x











2


























x











3

































































=






[













4




















]











x











1



















,





x











2



















,





x











3


























0









































































































然后即可代入求解:

f = [-2 -3 -4];
A = [2 1 3; -1 -1 0; -1 0 -1];
b = [36; -8; -10];
Aeq = [1 1 -1];
beq = [4];
lb = [0; 0; 0];

[x, fval] = linprog(f, A, b, Aeq, beq, lb, []);
fval = -fval;

最后得出的结果为:

x =
    2.6667
    8.6667
    7.3333

fval =
    60.6667



版权声明:本文为qq_63585949原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。