为猪商城 / 2017-01-12
中图分类号:TP311.56;S816.31 文献标识码:B 文章编号:0258-7033(2000)02-0036-03
近年来,国内外利用线性规划运筹原理及计算机编程计算家畜日粮配方的应用已有很多报道,然而,如何将被誉为国际标准统计软件SAS(本文指FOR windows的6.12版或6.11版)软件包应用于优化家畜饲料配方的公开报道却较为少见。为此笔者特结合“广东工厂化猪场瘦肉型猪优化配合饲料的研究”课题实例并应用线性规划原理及利用SAS(6.12版)求解,获得了点滴成功体会,现简介如下。
1 线性规划饲料配方问题
1.1 实例 广东某猪场可利用原料有玉米(X1)、豆饼(X2)、麸皮(X3)、鱼粉(X4)、油脂(X5)、酵母(X6)、石粉(X7)及磷酸氢钙(X8),现为哺乳母猪(系大约克夏公配长白母所得二元杂种)筛选最佳饲料配方。
1.2 建立饲料配方线性规划模型 即根据各种原料的营养成分、营养价值、原料价格、营养需要量及饲料约束用量等数据建立成完整的线性规划方程组(见下所示)。
目标函数Z=1.68X1+1.97X2+1.65X3+4.55X4+8X5+5X6+0.4X7+1.7X8→(最小值)?
消化能约束(Mcal/kg) 3.36X1+3.21X2+2.53X3+3X4+9.16X5+3.09X6+0X7+0X8>=3280Mcal/t
粗蛋白约束(g/kg) 78X1+424X2+136X3+605X4+0X5+413X6+0X7+0X8>=135000g/t
钙约束(g/kg) 1X1+2.8X2+2.2X3+51.1X4+0X5+0X6+382.2X7+243.2X8>=7500g/t
钙约束(g/kg) 1X1+2.8X2+2.2X3+51.1X4+0X5+0X6+382.2X7+243.2X8<=12000g/t
磷约束(g/kg) 2.8X1+5.9X2+10.9X3+28.8X4+0X5+0X6+0X7+189.7X8>=6000g/t
赖氨酸约束(g/kg) 2.6X1+28.1X2+5.8X3+42.5X4+0X5+2.56X6+0X7+0X8>=5300g/t
总重量约束(kg) 1X1+1X2+1X3+1X4+1X5+1X6+1X7+1X8=997.5kg
油脂重量约束(kg) 0X1+0X2+0X3+0X4+1X5+0X6+0X7+0X8>=20kg
玉米重量约束(kg) 1X1+0X2+0X3+0X4+0X5+0X6+0X7+0X8<=700kg
麸皮重量约束(kg) 0X1+1X2+0X3+0X4+0X5+0X6+0X7+0X8<=150kg
酵母重量约束(kg) 0X1+0X2+0X3+0X4+0X5+1X6+0X7+0X8>=70kg
鱼粉重量约束(kg) 0X1+0X2+0X3+1X4+0X5+0X6+0X7+0X8<=65kg
注:各原料总重量约束值为997.5kg,即食盐未参与运算,故每997.5kg配合饲料需另加入食盐2.5kg。
2 SAS程序及其使用方法
2.1 具体SAS程序(见下)
/*可用于优化日粮配方即求解线性规划问题的SAS程序*/?
data s1;infile’PIGSL1.DAT’
input_row_$ X1-X8_type_$_rhs_;
proc lp rangerhs rangeprice;
run;
2.2 SAS程序需调用的数据文件形式 反映上列线性规划问题的数据文件名这里不妨设为PIGSL1.DAT来存盘,具体形式如下,(1) 这里需说明的是所建立的数据文件形式须系文本文件形式(可用)。(2)建立数据文件时,除遇约束条件≥用GE来代替,在解其它实际问题时很可能若遇≤或=约束条件,则分别须用LE及EQ来代替)。(3) 上列数据文件的第一列系固定格式,最后一列中的不可缺少。
object
1.68
1.97
1.65
4.55
8
5
0.4
1.7
MIN
.
con1
3.36
3.21
2.53
3
9.16
3.09
0
0
GE
3280
con1
78
424
136
605
0
413
0
0
GE
135000
con1
1
2.8
2.2
51.1
0
0
382.2
243.2
GE
7500
con1
1
2.8
2.2
51.1
0
0
382.2
243.2
LE
12000
con1
2.8
5.9
10.9
28.8
0
0
0
189.7
GE
6000
CON1
2.6
28.1
5.8
42.5
0
2.56
0
0
GE
5300
CON1
1
1
1
1
1
1
1
1
EQ
997.5
CON1
0
0
0
0
1
0
0
0
GE
20
CON1
1
0
0
0
0
0
0
0
LE
700
CON1
0
0
1
0
0
0
0
0
LE
150
CON1
0
0
0
0
0
1
0
0
GE
70
CON1
0
0
0
1
0
0
0
0
LE
65
2.3 程序说明 (1) 上列程序数据步中第一行data s1是建立临时数据集s1,第二行是调入外部数据文件,而input语句中使用的、以下划线开头和结尾的特殊变量名_ROW_$、_TYPE_$、及_rhs_系分别按习惯指明输入数据性质的。(2) 程序过程步PROC LP语句是利用SAS求解线性规划问题的关键特征语句,不可缺少。LP后可加选择项。如这里rangerhs rangeprice分别系灵敏度度分析(ranger)的语句,即分别指出的是线性规划最优基保持不变的情况下右端值(主要是营养指标约束量)或价格系数(即原料的单价)的可变化范围(顺便需说明的是如果在PROC LP后加改选择项还可分别进行右端约束值、价格系数允许原问题最优基改变的参数线性规划问题的灵敏度度分析,限于篇幅本文不作讨论)。
3 程序运行结果的解释
在PGM窗口内健入上列SAS程序,然后用鼠标点击“人跑”(sumbit)即运行按钮,便可在OUTPUT窗口中显示有关程序的所有的运行结果(此处略)。结果中除了包括问题概要(PROBLEM SUMMARY)、解的概要(SOLUTION SUMMARY)、变量概要(VARIABLE SUMMARY)及约束概要(CONSTRAINT SUMMARY)以外,还包括右端约束值灵敏度度分析(RHS RANGE SUMMARY)概要及价格系数(PRICE RANGE SUMMARY)灵敏度度分析概要等内容。(1) 问题概要:最优化的种类(是极大还是极小,饲料配方问题当属极小化问题),目标函数行名(由_ROW_变量所指出的),右端系数的变量名(_RHS_),类型标识的变量名(_type_)等。(2) 解的概要:LP过程的终止状态,当前解的目标函数值,单纯形法阶段1和2的迭代步数,阶段3(对偶迭代阶段)的迭代步数。(3) 变量概要:原问题中与变量相联系的列数编号(Col),当前解各个变量的状态(Status),问题中的变量名(Variable Name)等另外包括最优解(本例最佳配方:X1=700.000,X2=100.728,X3=81.091606,X4=0.000000,X5=20.000000,X6=70.000000,X7=12.175471,X8=13.504501)(4) 约束概要:约束行数和对应的名称,约束的种类,与约束的对应的剩余或松弛变量变量的列数编号,约束行的右端值,约束行的达到的实际当前值(在本文例分别为3280.000,137247.30973,9098.201,9098.201,6000.000,5300.000,997.5,20.000000,700.000,81.091606,70.000000及0.000000等)。(5) 右端值变量分析概要:指最优基不变(当然最优解及目标函数值可能会变化)并保持所有其他条件不变的情况下,某个约束方程的右端约束值可变化的范围。这一点对饲料生产者掌握所需原料种类有指导意义。而且只有约束值在所求范围内调整,目标函数与约束值的既定函数关系(影子价格)才成立。(6) 价值系数分析概要:即指在不改变最优解的情况下,目标函数中每个系数值Ci能够变化的范围。从而反映了配方对原料市场价格波动的应变能力。只要单价在所求值域范围内就没有必要重新筛选配方。最后须提及的是,如果一个饲料配方(线性规划)问题没有可行解,sas也会输出不可行的信息概要(INFEASIBLE INFORMATION SUMMARY)。