备战建模——线性规划问题

问题引入

某机床厂生产甲、乙两种机床,每台销售后的利润分别为 4000 元与 3000 元。生产甲机床需用A、B机器加工,加工时间分别为每合 2h 和1h;生产乙机床需用 A、B、C三种机器加工,加工时间为每台各1h。 若每天可用于加工的机器时数分别为A机器10h B机器8h 和C机器7h,问该厂应生产甲、己机床各儿台,才能便总利润最大?

上述问题的数学模型:设该厂生产x1台甲机床和x2台机床时总利润最大
max ⁡ z = 4 x 1 + 3 x 2 \max z=4x1+3x2 maxz=4x1+3x2
s . t { 2 x 1 + x 2 ≤ 10 x 1 + x 2 ≤ 8 x 2 ≤ 7 x 1 , x 2 ≥ 0 s.t\left\{ \begin{aligned} 2x1+x2≤10 \\ x1+x2≤8 \\ x2≤7\\x1,x2≥0 \end{aligned} \right. s.t⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​2x1+x2≤10x1+x2≤8x2≤7x1,x2≥0​
线性规划问题是在一组线性约束条件的限制下,求线性目标函数的最大或者最小问题
min ⁡ x f T x \min_xf^Tx minx​fTx

s . t { A ⋅ x ≤ b A e q ⋅ x ≤ b e q l b ≤ x ≤ u b s.t\left\{ \begin{aligned} A·x≤b \\ Aeq·x≤beq \\ lb≤x≤ub \end{aligned} \right. s.t⎩⎪⎨⎪⎧​A⋅x≤bAeq⋅x≤beqlb≤x≤ub​
式中:f,x,b,beq,lb,ub为列向量,f为价值向量,b为资源向量;A,Aeq为矩阵
MATLAB中对应的命令为:
[ x , f v a l ] = l i n p r o g ( f , A , b ) [x,fval]=linprog(f,A,b) [x,fval]=linprog(f,A,b)
[ x , f v a l ] = l i n p r o g ( f , A , b , A e q ) [x,fval]=linprog(f,A,b,Aeq) [x,fval]=linprog(f,A,b,Aeq)
[ x , f v a l ] = l i n p r o g ( f , A , b , A e q , l b , u b ) [x,fval]=linprog(f,A,b,Aeq,lb,ub) [x,fval]=linprog(f,A,b,Aeq,lb,ub)
式中:x返回决策向量的取值;fval返回目标函数的最优值;f为价值向量;A
和b对应线性不等式约束;Aeq和 beg对应线性等式约束;lb和ub分别对应决策向量的下界向量和上界向量。
注:max和≥应该转换成min和≤
以下例子为例:
max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3 \max z=2x1+3x2-5x3 maxz=2x1+3x2−5x3
x 1 + x 2 + x 3 = 7 x1+x2+x3=7 x1+x2+x3=7
s . t { 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≥ 0 s.t\left\{ \begin{aligned} 2x1-5x2+x3≥10 \\x1+3x2+x3≤12 \\ x1,x2,x3≥0 \end{aligned} \right. s.t⎩⎪⎨⎪⎧​2x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≥0​

化为标准型,即
min ⁡ w = − 2 x 1 − 3 x 2 + 5 x 3 \min w=-2x1-3x2+5x3 minw=−2x1−3x2+5x3

s . t { [ − 2 5 − 1 1 3 1 ] [ x 1 x 2 x 3 ] ≤ [ − 10 12 ] [ 1 1 1 ] [ x 1 x 2 x 3 ] T = 7 [ x 1 x 2 x 3 ] T ≥ [ 0 0 0 ] T s.t\left\{ \begin{aligned} \begin{bmatrix} -2&5&-1\\ 1&3&1\end{bmatrix}\begin{bmatrix} x1\\ x2\\x3\end{bmatrix}≤\begin{bmatrix} -10\\ 12\end{bmatrix} \\ \begin{bmatrix} 1&1&1\end{bmatrix}\begin{bmatrix} x1&x2&x3\end{bmatrix}^T=7 \\ \begin{bmatrix} x1&x2&x3\end{bmatrix}^T≥\begin{bmatrix} 0&0&0\end{bmatrix}^T \end{aligned}\right. s.t⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​[−21​53​−11​]⎣⎡​x1x2x3​⎦⎤​≤[−1012​][1​1​1​][x1​x2​x3​]T=7[x1​x2​x3​]T≥[0​0​0​]T​
对应的MATLAB代码为:
f = [ 2 ; − 3 ; 5 ] ; a = [ − 2 , 5 , − 1 ; 1 , 3 , 1 ] ; b = [ − 10 , 12 ] ; a e q = [ 1 , 1 , 1 ] ; b e q = 7 ; [ x , y ] = l i n p r o g ( f , a , b , b e q , z e r o s ( 3 , 1 ) ) x , y = − y 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,beq,zeros(3,1))\\ x,y=-y 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,beq,zeros(3,1))x,y=−y

上一篇:多态的两种转型(向上转型&向下转型)


下一篇:微信小程序