货运服务网络设计:经典文献阅读笔记(2)

2021-4-8

还是 1984 年的文献
[1] Crainic T G , Rousseau J M . Multicommodity, multimode freight transportation: A general modeling and algorithmic framework for the service network design problem[J]. Transportation Research Part B: Methodological, 1986, 20(3):225-242.

接着之前介绍完货运服务网络,下面把文献给出的通用模型放一下
服务网络设计通用模型服务网络设计通用模型参数说明
再给一个我特例化的小模型:
这个小模型暂时还不能放,先说说在小算例编程求解的时候遇到的问题

想看看Gurobipy能不能求解一个小算例,所以要在货运需求构成的服务网络基础上,找到服务图的所有路径。

货运需求是向的,表示为从节点A到节点B的运输需求。
货运需求构成的服务网络

# 每个弧段的运输需求
serarc, req = grb.multidict({
    ('hz','js'):24,
    ('hz','sh'):30,
    ('hz','nb'):16,
    ('hz','sz'):20,
    ('yw','hz'):18,
    ('yw','sz'):50,
    ('sz','js'):40,
    ('js','hz'):30,
    ('sh','nb'):45,
    ('nb','sz'):34
})

上面是我目前作为输入数据的货运需求。
grb.multidict()是Gurobipy的一种数据结构。

for s in serarc:
    print(f'弧:{s},起始点:{s[0]} -> 终止点{s[1]}')

serarc输出为如下:

弧:('hz', 'js'),起始点:hz -> 终止点js
弧:('hz', 'sh'),起始点:hz -> 终止点sh
弧:('hz', 'nb'),起始点:hz -> 终止点nb
弧:('hz', 'sz'),起始点:hz -> 终止点sz
弧:('yw', 'hz'),起始点:yw -> 终止点hz
弧:('yw', 'sz'),起始点:yw -> 终止点sz
弧:('sz', 'js'),起始点:sz -> 终止点js
弧:('js', 'hz'),起始点:js -> 终止点hz
弧:('sh', 'nb'),起始点:sh -> 终止点nb
弧:('nb', 'sz'),起始点:nb -> 终止点sz

可以先将问题化解为两个点之间的所有可行路径:
可以先定义one step 为一个弧,two steps 则表示两段弧构成的路径,依次类推。路径生长不能逆,即不能回头。

  1. 获取一对起始点和终止点,记录1step路径
  2. 记录从起始点出发的弧所连接的1step路径,删除指向终止点的路径,继续增加一节剩下路径的弧段,判断是否指向终止点,是则记录2steps路径,并删除指向终止点的路径。
  3. 剩余的路径继续增加一段弧,判断是否指向终止点,是则记录3 steps 路径,并删除指向终止点的路径。
  4. 重复直到路径没有可以新增弧段
  5. 由于服务网络中转过多会导致成本上升,时效变差,因此可以选择在3steps时停止路径搜索,这需要将以上操作做成函数,函数的输入是有向图的边集,最大中转数,输出是所有可行路径的字典,路径字典的键是路径的序号,值是弧段。

具体的代码实现再说吧。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值