1.5 货物运送的线性规划模型案例
一架货机有3个货舱:前舱、中舱和后舱。3个货舱所能装载的货物最大重量和体积的限制如表1-4所示。
表1-4 货舱数据
为在飞行过程中保持平衡,3个货舱装载的货物必须与其最大的容量成比例。
现有4类货物需要用该货机进行装运,货物的规格以及装运后所获得的利润如表1-5所示。
表1-5 货物规格及利润表
建立数学模型计算如何装运才能使得货机飞行利润最大。
问题分析
这个优化问题的目标是使得货机飞行获利最大,而要做的决策为装运方案,即在前舱、中舱、后舱分别装运4类货物的重量。决策变量取值需要受到4个条件的限制:货舱重量、货舱体积、飞行平衡、运送货物总量。按照题目所给条件将决策变量、目标函数和约束条件用数学符号及公式表示出来,就可以得到相应的数学模型。
模型假设
1.每种货物可以分布在一个或者多个货舱内;
2.不同种类的货物可以放在同一货舱且不留间隙;
3.每种货物可以无限细分,即货物在各舱内的存储量为非负连续实数。
模型设计
按照优化模型的三要素(决策变量、目标函数、约束条件)建立数学模型。设在前舱放置4类货物的数量为x11,x12,x13,x14;在中舱放置4类货物的数量为x21,x22,x23,x24;在后舱放置4类货物的数量为x31,x32,x33,x34。因此,货物1的重量可表示为,货物2的重量可表示为,货物3的重量可表示为,货物4的重量可表示为。设飞行装运获利为z元,优化模型的目标函数如下:
在确立目标函数后,决策变量取值受到货舱重量、货舱体积、飞行平衡、运送货物总量以及决策变量属性的限制。
• 货舱重量的限制:前舱、中舱、后舱装载的货物重量不得超过货舱重量上限。
• 货舱空间的限制:前舱、中舱、后舱装载的货物空间不得超过货舱空间上限。
• 飞行平稳性的限制:为在飞行过程中保持平衡,3个货舱装载的货物必须与其最大的容量成比例。
• 货物总量的限制:装载的货物总重量不得超过运送货物总重量。
• 决策变量属性的限制:xmn均不能为负值,即xmn≥0,m=1,2,3;n=1,2,3,4。
综上所述,所建立货机运输问题的优化模型如下:
模型求解
在LINGO软件中输入如下代码求解上述线性规划模型:
运行如上程序,将显示求解状态如图1-8所示。
图1-8 货舱运输问题LINGO求解状态
图1-8显示:模型类型属于LP(线性规划模型),目标函数值的状态为Global Opt(全局最优解),目标函数最优值为121516,迭代次数为20次。模型运算的具体结果显示在Solution Report如下:
模型运算的结果如表1-6所示。在前舱存储10吨货物2,在中舱存储约12.95吨货物3和约3.05吨货物4,在后舱存储5吨货物2和3吨货物3。采用上述运输策略可以获得最大利润为121515.8元。
表1-6 具体运算结果
为便于调用MATLAB软件求解上述线性规划模型时,需将货物运输的线性规划模型写成矩阵形式如下:
由于本题涉及变量矩阵较大,为节省篇幅直接给出调用linprog命令解决问题的MATLAB代码。
注意 与LINGO代码不同,当采用MATLAB求解线性规划模型时,软件并不默认决策变量非负性。因此,在代码中需要添加决策变量的非负要求,即增加决策变量的取值下限。
运行上述程序,具体结果显示如下:
模型运算的结果如表1-7所示。在前舱存储7吨货物2和3吨货物3,在中舱存储约12.95吨货物3和约3.05吨货物4,在后舱存储8吨货物2。采用上述运输策略可以获得最大利润为121515.8元。
表1-7 具体运算结果
采用MATLAB软件Optimizationtool工具箱求解上述线性规划模型时模型结果显示如图1-9。
图1-9 MATLAB软件optimtool工具箱求解线性规划模型示意
最后,我们来了解Python求解上述线性规划模型的方法,其程序如下:
具体结果显示如下:
模型运算的结果如表1-8所示。在前舱存储7吨货物2和3吨货物3,在中舱存储约12.95吨货物3和约3.05吨货物4,在后舱存储8吨货物2。采用上述运输策略可以获得最大利润为121515.8元。
表1-8 具体运算结果
对比MATLAB软件、Python软件与LINGO软件得到的结果,细心的读者可以发现虽然不同软件得到的目标函数值相同,但是决策方案并不相同。这说明线性规划模型中可能存在多种决策方案达到最优值,但最优目标值往往只有一个。读者在自行验证上述程序时可以发现,不同版本的MATLAB软件、Python软件由于精度不同、迭代初始值不同在最终结果输出时可能会有细微差别。