1.4 食用油加工的线性规划模型案例
加工一种食用油需要精炼若干种原料油并把它们混合起来。原料油的来源有两大类共五种:植物油VEG1、植物油VEG2、非植物油OIL1、非植物油OIL2、非植物油OIL3。购买每种原料油的价格(英镑/吨)如表1-2所示,最终产品以150英镑/吨售出。
表1-2 原料油价格
植物油和非植物油需要在不同的生产线上进行精炼。每月能够精炼的植物油不超过200吨,非植物油不超过250吨;在精炼过程中,重量没有损失,精炼费用可忽略不计。注意,最终产品必须符合硬度指标的技术条件。按照硬度计量单位,它必须为3.0~6.0。假定硬度的混合过程是线性的,且原料油的硬度数据如表1-3所示。
表1-3 原料油硬度
为使利润最大,建立数学模型制订月采购计划和加工计划。
问题分析
这个优化问题的目标是使得利润最大,而要做的决策是每月采购的各类原料油吨数。决策受到3个条件的限制:原料油的精炼能力、成品油的硬度要求以及决策变量属性。通过对原题进行分析后,可以得到如图1-5所示框架结构。按照题目所给条件将决策变量、目标函数和约束条件用数学符号及公式表示出来,就可以得到相应的数学模型。
图1-5 食用油加工问题思路
模型假设
1.每种原料油的进价与进货量无关,最终成品油的售价与产量无关,且生产的成品油均可售出。
2.最终产品的硬度值是各种原料油硬度值的线性组合,且在精炼过程中没有重量损失。
3.每种原料油的采购吨数可以是任意非负实数。
模型设计
按照优化模型的三要素(决策变量、目标函数、约束条件)建立数学模型。设每月采购五种原料油(VEG1、VEG2、OIL1、OIL2、OIL3)的吨数分别为xm(m=1,2,3,4,5),那么,购买各类原料油的成本可表示为c=110x1+120x2+130x3+110x4+115x5。由于精炼过程中重量没有损失,成品油重量可表达为。假设精炼的成品油均可售出,利润可表达为。因此,利润最大化的目标函数可以表示如下:
确立目标函数后,决策变量取值受到原料油精炼能力、成品油硬度要求、决策变量属性的限制。
• 原料油精炼能力的限制:每月能够精炼的植物油不超过200吨,每月能够精炼的非植物油不超过250吨。
• 成品油硬度要求的限制:最终产品硬度必须为3.0~6.0;而最终产品的硬度值是各种原料油硬度值的线性组合。因此,此约束条件可以表达如下:
• 决策变量属性的限制:xm均不能为负值,即xm≥0,m=1,2,…,5。
综上所述,所建立的食用油加工优化模型如下:
模型求解
在LINGO软件中输入如下代码求解上述线性规划模型:
运行如上程序,显示求解状态如图1-6所示。
图1-6 食用油加工问题LINGO求解状态
图1-6显示:模型类型属于LP(线性规划模型),目标函数值的状态为Global Opt(全局最优解),目标函数最优值为17592.6,迭代次数为3次。模型运算的具体结果将显示在Solution Report如下:
模型运算的结果显示:当x1=159.2593,x2=40.74074,x4=250时,目标函数取得最大值17592.59,即采购植物油VEG1 159.2593吨、植物油VEG2 40.74074吨、非植物油OIL2 250吨,能够获得最大收益17592.59元。
为便于调用MATLAB软件求解上述线性规划模型,需将食用油加工问题的线性规划模型写成矩阵形式如下:
其中,A=[40 30 20 40 35]T,X=[x1x2x3x4x5]T,
然后,调用函数linprog求解线性规划模型。注意,函数linprog可用于求解目标函数最小化的线性规划模型。因此,当求目标函数最大化时,可采用取相反数的方式将最大化问题转化为最小化问题。代码如下所示:
运行上述程序,可以得到具体结果显示如下:
模型运算的结果显示:当x1=159.2593,x2=40.7407,x4=250时,目标函数取得最小值-17592.59,即原目标函数取得最大值17592.59。所得优化模型的决策变量与目标函数值和LINGO软件得到的结果相同。
采用MATLAB软件Optimizationtool工具箱求解上述线性规划模型时,模型结果显示如图1-7。
图1-7 MATLAB软件optimtool工具箱求解线性规划模型示意
如果采用Python求解上述线性规划模型,程序如下所示:
运行上述程序,可得到具体结果显示如下:
模型运算结果显示:当x1=159.25926,x2=40.74074,x4=250时,目标函数取得最小值-17592.59,即原目标函数取得最大值17592.59,所得优化模型的决策变量与目标函数值与LINGO软件、MATLAB软件得到的结果相同。