干货 | 求解VRPTW松弛模型的Column Generation算法的JAVA代码分享

共 1226字,需浏览 3分钟

 ·

2019-08-31 23:50

前言


260e35b4ffbb3c95fb1bdb31287d11e3.webp经过小编的不断努力和修正,Column Generation + ESPPRC+ pulse algorithm的内容终于写完了。此过程真是充满曲折啊,希望大家看完多多支持一下。aa24804fa37d2eb84e80323bf26b9591.webp
470549bfdc3a613fd2b813214cb95be7.webp



运行说明


关于这部分的代码,我们提供两个版本。


第一个版本来自GitHub,是一个叫Seminar的国外大神写的。


他的子问题采用上一篇推文介绍的模型,找一条reduced cost最短的路径,运行只需要更改下面文件中算例文件的路径即可。


e8e39cc315c0a577fe2b9b5653ae8535.webp


运行的中间结果如下:


fd296595447bdf6145c4a6c1fd446b07.webp


- Iteration:迭代次数


- SbTime:子问题求解时间(s)


- nPaths:Master Problem中的总路径


- MP lb:Master Problem的线性松弛最优解,这里由于建模方式的原因,该最优解把服务时间也算在路径距离上的,最终减去9000即可得到路径距离。


- SB lb:子问题的线性松弛最优解。


- SB int:子问题的整数最优解。


关于子问题的最大求解时间限制(s),可以在下面文件中设置:


c688bbfbf0c490ab95070277a3549086.webp


第二个版本是小编写的:


运行参数说明:

-in:算例文件路径;

-out:结果文件输出。


比如:

-in input\Solomon\100_customer\C101.TXT -out output\


参数设置请找到以下主运行文件:


8d0ff109c8d3ee7c2d5998811be8b034.webp


右键找到运行设置里面进行配置。(默认情况下输入上面的参数能直接运行)


9f7ef6a3fc32ae92bd3a7174c59ed957.webp


中间结果:


30f7e25a4fd8f2afd56865c85d162126.webp


- Iteration:迭代次数

- SbTime:子问题求解时间(s)

- nPaths:MasterProblem中的总路径

- MP lb:Master Problem的线性松弛最优解。

- SB lb:子问题的最优解。


关于第一个版本,其子问题建模方式还是依赖主问题的对偶变量的,如下:


fad6651e135022e8d9fd26d5235f0de2.webp


其中t_ij就是每条边本来的cost,pi就是Master Problem的对偶变量。每一次迭代就是这样更新子问题的cost,重新建模求解的。


关于小编的版本:


192ebecb67ba01442a99c8530ea2a1d7.webp


每次迭代的时候会更新ESPPRC问题中的cost,然后运行pulse算法重新求解。


其他的话结构和注释都写得非常清晰了,大家肯定能看懂的。


由于是精确算法,子问题时间没有保障的,有时候很快能跑完,有时候一天都跑不完。和算例有很大关系的。


【如对代码有疑问,可联系小编,可以提供有偿辅导服务】

【有偿辅导纯属个人行为,与团队无关】


代码获取


代码获取请关注我们的公众号,在公众号后台回复【cgvrptw】不包括【】即可获取。


7fda8937c6398c1381118179d8454234.webp


觉得不错的同学请在GitHub上加个星,谢谢!


END





浏览 60
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报