R语言-运筹学虚拟变量运输问题实例

本文介绍了如何使用运筹学方法解决具有不确定需求的运输问题。通过建立数学模型,利用R语言的lpSolve包,将不确定需求转化为虚拟产地,确保在满足各城市最低需求的同时,最小化运输成本。模型中,对于不同城市的需求进行了特殊处理,如LosDevils和Berdo的城市需求调整,以适应模型要求。最终,通过运行R代码得到了优化的运输量矩阵。
摘要由CSDN通过智能技术生成

这是我自己的运筹学笔记,由于老师讲的实在一言难尽,导致自己不得不对着英文教材自学,以下的例子就出自英文教材。

问题介绍

有3条河流向4个城市供水,表格9.10中显示了运费,没有运费则表示无法供水。城市有其最小需求(刚需,第一行),还有奢侈性需求(刚需+额外需求,第二行),首先满足城市的刚需,在此基础上尽量满足其奢侈性需求,并使得费用最小化。

难点在于每个城市的需求是不确定的,有一个上界和下界,上界为其他城市的刚需满足后剩下的,下界即为刚需。因此Hollyglass的上界就是(50+60+50)-(30+70+0)=60而非无穷大。

然而在运输问题中需求得是常数而不能是变量,因此要对问题做一些变形。引入一个虚拟产地用来满足奢侈性需求。虚拟产地的产量即为需求的上界减去真实的产量:(50+70+30+60)-(50+60+50)=50。注意虚拟产地的运费都是0,并且由于Calorie不能运到Hollyglass, 故将其运费设为一个极大值M。

接下来对模型做出调整以便把奢侈性需求纳入考虑。

Hollyglass不需要调整,因为它的奢侈性需求减去虚拟产量等于10,正好为它的刚需,即这部分刚需一定能由真实产量提供。Los Devils的刚需等于奢侈性需求,即必须全部由真实产量提供,因此在虚拟产量中将它的运费设为M。对于Berdo,虚拟产量在满足奢侈性需求的前提下还能满足部分刚需,由于其刚需是30,上界是50,故虚拟产量提供不能超过20。因此将Berdo分成2块,一块需求为30,虚拟产地运费为M,另一块需求为20,虚拟产地运费为0。

在这里插入图片描述

R语言解决

library(lpSolve)
M = 10000
a1 = c(16,16,13,22,17)
a2 = c(14,14,13,19,15)
a3 = c(19,19,20,23,M)
a4 = c(M,0,M,0,0)
a = rbind(a1,a2,a3,a4)    #系数矩阵
row.rhs = c(50,60,50,50)     #供给约束值
row.dir = rep('=',4)     #约束方向
col.rhs = c(30,20,70,30,60)    #需求约束值
col.dir = rep("=",5)     #约束方向
solution = lp.transport(a, row.signs = row.dir, row.rhs = row.rhs, col.signs = col.dir, col.rhs = col.rhs)
solution$solution

结果为

忽略最后一行虚拟产量的结果,该矩阵即为运输量矩阵。

参考教材:Introduction to Operations Research,Frederick S. Hillier • Gerald J. Lieberman

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值