【参考资料】
- B站:【零基础教程】老哥:数学建模算法、编程、写作和获奖指南全流程培训!
- 书籍:数学建模算法与程序(司守奎)
1 线性规划
1.1 线性规划的 Matlab 标准型
min x c T x \underset{x}{\min}\;c^Tx xmincTx
s . t . { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b s.t.\begin{cases} Ax\leq b\\ Aeq\cdot x=beq\\ lb\leq x\leq ub \end{cases} s.t.⎩⎪⎨⎪⎧Ax≤bAeq⋅x=beqlb≤x≤ub
% 最简形式
[x, fval] = linprog(c, A, b);
% 完整形式
[x, fval] = linprog(c, A, b, Aeq, beq, LB, UB, x0, OPTIONS);
例如,对于如下线性规划问题:
max x 2 x 1 − 3 x 2 \underset{x}{\max}\;2x_1-3x_2 xmax2x1−3x2
s . t . { 2 x 1 − 5 x 2 ≥ 10 x 1 + 2 x 2 ≤ 12 x 1 + x 2 = 7 x 1 , x 2 ≥ 0 s.t.\begin{cases} 2x_1-5x_2\geq 10\\ x_1+2x_2\leq 12\\ x_1+x_2=7\\ x_1,x_2\geq0 \end{cases} s.t.⎩⎪⎪⎪⎨⎪⎪⎪⎧2x1−5x2≥10x1+2x2≤12x1+x2=7x1,x2≥0
c = [2; -3];
A = [-2, 5; 1, 2]; b = [-10; 12];
aeq = [1, 1]; beq = 7;
x = linprog(-c, A, b, aeq, beq, zeros(2,1))
value = c' * x
1.2 可以转化为线性规划的问题
很多看起来不属于线性规划的问题,也可以通过一定的转换变成线性规划问题。如:
min x ∣ x 1 ∣ + ∣ x 2 ∣ + . . . + ∣ x n ∣ , s . t . A x ≤ b \underset{x}{\min}\;\vert x_1\vert+\vert x_2\vert+...+\vert x_n\vert,\;\;s.t.\;Ax\leq b xmin∣x1∣+∣x2∣+...+∣xn∣,s.t.Ax≤b
由于对于任意的 x i x_i xi,都存在 u i , v i > 0 u_i, v_i>0 ui,vi>0 满足 x i = u i − v i , ∣ x i ∣ = u i + v i x_i = u_i − v_i, \vert x_i\vert= u_i + v_i xi=ui−vi,∣xi∣=ui+vi。例如:
u i = ∣ x i ∣ + x i 2 , v i = ∣ x i ∣ − x i 2 u_i=\frac{\vert x_i\vert+x_i}{2},v_i=\frac{\vert x_i\vert-x_i}{2} ui=2∣xi∣+xi,vi=2∣xi