数学建模 第二次作业

某工厂需要利用三种原材料(分别记为1 , 2 ,3 )混合调配出三种不同的产品(甲,乙,丙)。具体要求及产品利润如下表所示,请建立数学模型,为该厂安排生产规划,使其利润最大

产品名称 规格要求 售价(元/Kg)
原料 1 >= 50% 原料 2<=25% 50
原料 1 >= 25% 原料 2<=50% 35
不限 25
原材料名称 每天最多供应量 成本 (元/Kg)
1 100 65
2 100 25
3 60 35

分析问题,建立模型

> 1. 决策变量:

(1). 甲产品中原料一的部分,原料二的部分,原料三的部分
(2). 乙产品中原料一的部分,原料二的部分,原料三的部分
(3). 丙产品中原料一的部分,原料二的部分,原料三的部分
以上决策变量分别设为 x1, x2, x3; x4, x5, x5;x7, x8, x9 ;

2. 目标函数:

根据利润和成本的关系:
得出利润 = 50( x1 + x2 + x3 )+ 35( x4 + x5 + x6 ) + 25 ( x7 + x8 + x9)
-65( x1 + x4 + x7)- 25( x2 + x5 + x8 ) – 35( x3 + x6 + x9 )
= -15 x 1 + 25 x 2 + 15 x 3 – 30 x 4+10 x 5 - 0 x 6 – 40 x 7 + 0 x 8 - 10 x 9

3. 约束条件:

甲中原料比例限制
x1 >= ( x1 + x2 + x3 ) / 2
x2 <= ( x1 + x2 + x3 ) / 4
乙中原料比例限制
x4 >= ( x4 + x5 + x6 ) / 4
x5 <= ( x4 + x5 + x6 ) / 2
三种原料总量限制
x1 + x4 + x7 <= 100
x2 + x5 + x8 <= 100
x3 + x6 + x9 >= 60
常识限制
X1 >= 0 , x2 >= 0 , x3 >= 0…….x9 >= 0

4 . 线性规划模型:

Max z = -15x1 + 25x2 + 15x3–30x4 + 10x5 - 0x6–40x7 + 0x8 - 10x9
x1 >= ( x1 + x2 + x3 ) / 2
x2 <= ( x1 + x2 + x3 ) / 4
x4 >= ( x4 + x5 + x6 ) / 4
x5 <= ( x4 + x5 + x6 ) / 2
x1 + x4 + x7 <= 100
x2 + x5 + x8 <= 100
x3 + x6 + x9 >= 60
xi >= 0 , i from 1 : 9

5 . 模型求解:

f = [ 15 ; -25 ; -15 ; 30 ; -10 ; 0 ; 40 ; 0 ; 10 ] ;
A = [ -1 1 1 0 0 0 0 0 0 ;
         -1 3 -1 0 0 0 0 0 0 ;
         0 0 0 -3 1 1 0 0 0 ;
         0 0 0 -1 1 -1 0 0 0 ;
         1 0 0 1 0 0 1 0 0 ;
         0 1 0 0 1 0 0 1 0 ;
         0 0 1 0 0 1 0 0 1 ] ;
b = [ 0 ; 0 ; 0 ; 0 ; 100 ; 100 ; 60 ] ;
lb = [ 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ] ;
[ x , fval , exitflag , output , lambda ] = linprog ( f , A , b , [] , [] , lb ) ;

程序运行结果

变量 X1 X2 X3 X4 X5 X6 X7 X8 X9
取值 100 50.000 50.000 0 0 0 0 0 0

最佳方案:
fval = - 500.000
100 kg 原料一, 50kg 原料二,50kg 原料三用于生产甲, 其余原料不用于生产乙和丙,这样收益最大,每天 500 元。

更简便的思路

可以观察到, 产品丙售价才 25, <= 于每一种原料的成本, 所以说, 出售丙绝对不会赚钱, 所以最优解中, 和丙有关的项, 肯定都是 0, 这些项可以不考虑, 只考虑甲和乙的情况。模型中剔除 x7, x8, x9 , 只需要考虑其余变量。

Matlab 程序修改如下 :

f = [ 15 ; -25 ; -15 ; 30 ; -10 ; 0 ] ;
A = [ -1 1 1 0 0 0 ;
         -1 3 -1 0 0 0 ;
         0 0 0 -3 1 1 ; 
         0 0 0 -1 1 -1 ;
         1 0 0 1 0 0 ;
         0 1 0 0 1 0 ;
         0 0 1 0 0 1 ] ;
b = [ 0 ; 0 ; 0 ; 0 ; 100 ; 100 ; 60 ] ;
lb = [ 0 ; 0 ; 0 ; 0 ; 0 ; 0 ] ;
[ x , fval , exitflag , output , lambda ] = linprog ( f , A , b , [] , [] , lb ) ;

猜你喜欢

转载自blog.csdn.net/nishisiyuetian/article/details/80284869
今日推荐