利用SAS软件计算最佳奶牛日粮配方示例
1引言
现在美国SAS公司推出的最新FORWIN-DOWS的SAS软件包6.11版是一个功能强、效率高、使方便且适合于多种操作系统的信息处理和科学计算组合软件系统,尤其是其中SAS/OR子模块可以用来求解线性规划如最佳奶牛日粮配方运筹优化问题。笔者在此通过筛选奶牛的日粮配方具体问题,来介绍用SAS语言编程筛选家禽的日粮配方的体会,供有关同志参考。
2奶牛饲料配方的线性规划问题
某奶牛场的奶牛平均体重为600千克,日产奶20千克,乳脂变为3.5%,该场原料有苜蓿干划(X1)青贮玉米(X2),玉米(X3),大麦(X4),米糠(X5),豆饼(X6),鱼粉(X7),骨粉(X8),及贝壳粉(X9),试配一平衡日粮。
首先是根据各种原料的营养成分、营养价值原料价格、营养需要量及饲料约束用量等数据建立成完整的线性规划方程组(见下所示)。
3SAS程序、调用的数据文件形式及说明
3.1SAS程序
/*优化奶牛日粮配方的SAS程序*/
datasl;
input'NUSL1.DAT';
input-row-$x1-x9-type-$-rhs-;
3.2数据文件形式
其中上列SAS程序中调用的数据文件(文件名为NUSL1.DAT)形式如下:
3.3SAS程序说明
(1)上列程序数据步中第一行datasl是临时数据集sl,第二行是调入外部数据文件,而input语句中使用的、以下划线划线开头和结尾的特殊变量名-ROW-$、-TYPE-$及-rhs-系分别按习惯指明输入数据性质的。:
(2)程序过程步PROCLP语句是利用SAS求解线性规划问题的关键特征语句,不可缺少。LP后可加选择项。如这里rangerhsrangeprice分别系灵敏度度分析(ranger)的语句,即分别指出的是线性规划最优基优持不变的情况下右端值(主要是营养指标约束量)或价格系数(即原料的单价)的可变化范围(顺便需说明的是如果在PROCLP后加改选择项还可以进行右端约束值、价格系数允许原问题最优基改变的参数线性规划问题的灵敏度度分析,限于篇幅本文不作讨论)。
3.4数据文件形式的说明(1)解实际问题时,一方面只要将上列SAS程序第二行中的数据文件名及第二行中的相应X9套改一下即可另外建立的数据文件形式须系文本文件形式。(2)建立数据文件时,除遇约束条件≥用GE来代替,在解其他实际问题时很可能若遇≤或=约束条件,则分别须用LE及EQ来代替。(3)上列数据文件的第一列系固定格式,最后一列中的不可缺少。
4程序运行结束简介
在PGM窗口内键入上列SAS程序,然后用鼠标击“人跑”(sumbit)即运行按钮,便可在OUT-PUT窗口中显示有关程序的所有的运行结果(限于篇幅此处略)。结果中除了包括问题概要(PROB-LEMSUMMARY)、解的概要(SOLUTIONSUM-MARY)、变量概要(VARIABLESUMMARY)及约束概要(CONSTRAINTSUMMARY)以外,还包括右端约束值灵敏度度分析(RHSRANGESUMMA-RY)概要及价格系数(PRICERANGESUMMARY)灵敏度度分析概要等内容。
其中解的概要、变量概要及约束概要中分别包括有目标函数值(即最低成本值)、各原料的最佳用量及运算右端约束达到的实际值。为便于读者理解灵敏度分析内容,这里不妨仅将有关缩减成本(Reducedcost)和约束条件的影子价格、目标函数系数可变范围及议程右边约束值可变范围等有关灵敏度分析的内容简介如下:
4.1缩减成本(Reducedcost)的含意:
下面我们将介绍线性规划问题中每个约束条件有相应的影子价格,其实每个决策变量也有相应的影子价格,称为缩减成本。
“REOUCEDCOST”给出最优单纯形表中第0行中变量的系数(min型问题)。其中变量的Re-ducedcost值应为0,对于非基变量,相应Reducedcost值表示当该非基变量增加一个单位时(其他非基变量保持不变)目标函数增加的量,说明在饮料数量条件不变的情况下,第J种饲料的数量在最优解基础上增加一个单位时目标成本的增加量。
4.2约束条件的影子价格
即指在现行基本解保持最佳时,当某约束条件的右端项每增(或减)1个单位时,所引起目标函数增(或减)的改变量。
4.3目标函数系数可变范围
即指在不改变最优解的情况下,目标函数中每个系数值Ci能够变化的范围。从而反映了配方对原料市场价格波动的应变能力。只要单价在所求值哉范围内就没有必要重新筛选配方。
4.4方程右边约束值可变范围
即指最优基不变(当然最优解及目标函数值可能会变化)并保持所有其他条件不变的情况下,某个约束议程的右端约束值可变化的范围。这一点对饲料生产者掌握所需原料种类有指导意义。而且只有约束值在志求范围内调整,目标函数值与约束值的既定函数(影子价格)才成立。