前言:虽然这是个比较简单的线性规划问题,但是怎么把问题转化为SAS代码,中间需要一定的小技巧,特叙此例。
问题:
Metalco公司希望得到一种新的合金,其中锡40%、锌35%、铅25%。原料合金的成分如下表:
合金 原料代号 |
成 分 |
价格 |
||
锡含量 / % |
锌含量 / % |
铅含量 / % |
美元/磅 |
|
1 |
60 |
10 |
30 |
77 |
2 |
25 |
15 |
60 |
70 |
3 |
45 |
45 |
10 |
88 |
4 |
20 |
50 |
30 |
84 |
5 |
50 |
40 |
10 |
94 |
工厂怎样从这几种合金原料选择来制得需要的合金,要求生产成本最小。
分析:
显然,这是个线性规划问题。
首先分析下目标,目标是生产成本最小,也就是生产单位重量(磅)的新合金用到的原料合金总价格最低。
然后根据问题来建立线性规划模型:
设生产x6=1磅新合金需要的五种金属重量为x1、x2、x3、x4和x5磅,目标函数为:
- MIN P=77*x1+70*x2+88*x3+84*x4+94*x5
约束条件为:
- 0.60*x1+0.25*x2+0.45*x3+0.20*x4+0.50*x5=0.40*x6
- 0.10*x1+0.15*x2+0.45*x3+0.50*x4+0.40*x5=0.35*x6
- 0.30*x1+0.60*x2+0.10*x3+0.30*x4+0.10*x5=0.25*x6
- x1+x2+x3+x4+x5=x6=1
- x1、x2、x3、x4、x5大于等于0
约束条件4可能比较隐蔽,通过分析目标即可理解。转化为SAS代码即为:
data ex; input _ROW_$ x1-x6 _TYPE_$ _RHS_; cards; object 77 70 88 84 94 0 MIN . proc1 0.60 0.25 0.45 0.20 0.50 -0.40 EQ 0 proc2 0.10 0.15 0.45 0.50 0.40 -0.35 EQ 0 proc3 0.30 0.60 0.10 0.30 0.10 -0.25 EQ 0 proc4 1 . . . . . GE 0 proc5 . 1 . . . . GE 0 proc6 . . 1 . . . GE 0 proc7 . . . 1 . . GE 0 proc8 . . . . 1 . GE 0 proc9 1 1 1 1 1 0 EQ 1 ; proc lp data=ex; var x1-x6; run;
在output得到结果:
The LP Procedure Constraint Summary Constraint S/S Dual Row Name Type Col Rhs Activity Activity 1 object OBJECTVE . 0 82.434783 . 2 proc1 EQ . 0 0 0.7391304 3 proc2 EQ . 0 0 17.26087 4 proc3 EQ . 0 0 -25.34783 5 proc4 GE 7 0 0.0434783 0 6 proc5 GE 8 0 0.2826087 0 7 proc6 GE 9 0 0.673913 0 8 proc7 GE 10 0 0 0.3913043 9 proc8 GE 11 0 0 0 10 proc9 EQ . 1 1 82.434783
通过结果可知,最低成本方案为x1=0.0435,x2=0.2826,x3=0.6739,即百分比为4.35%,28.26%和67.39%的合金原料1,2,3号,生产1磅新合金的最低成本为82.43美元。
类似的线性规划问题,本博还有 简单线性规划问题SAS编程 简单线性规划问题SAS编程之二