00 前言

经过小编不断的努力,关于column generation求解VRPTW的代码终于新鲜出炉啦。

01 运行说明

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

第一个版本GitHub一个叫Seminar的国外大神写的,他的子问题求解采用的是建模的方式(建模请看上一期的教程),找一条reduced cost最短的路径,运行只需要更改下面文件中算例文件的路径即可。

运行的中间结果如下:

  • Iteration:迭代次数
  • SbTime:子问题求解时间(s)
  • nPaths:Master Problem中的总路径
  • MP lb:Master Problem的线性松弛最优解,这里由于建模方式的原因,该最优解把服务时间也算在路径距离上的,最终减去9000即可得到路径距离。
  • SB lb:子问题的线性松弛最优解。
  • SB int:子问题的整数最优解。

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

第二个版本是小编写的:

运行参数说明:
-in:算例文件路径
-out:结果文件输出。

比如:【-in input\Solomon\100_customer\C101.TXT -out output】

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

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

中间结果:

  • Iteration:迭代次数
  • SbTime:子问题求解时间(s)
  • nPaths:Master Problem中的总路径
  • MP lb:Master Problem的线性松弛最优解。
  • SB lb:子问题的最优解。

02 简要讲解

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

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

关于小编的版本:

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

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

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

03 代码获取

可以关注我们的公众号哦!获取更多精彩消息!

干货 | column generation求解VRPTW问题 java代码分享的更多相关文章

  1. 干货 | 10分钟教你用column generation求解vehicle routing problems

    OUTLINE 前言 VRPTW description column generation Illustration code reference 00 前言 此前向大家介绍了列生成算法的详细过程, ...

  2. 干货 | 10分钟带你彻底了解column generation(列生成)算法的原理附java代码

    OUTLINE 前言 预备知识预警 什么是column generation 相关概念科普 Cutting Stock Problem CG求解Cutting Stock Problem 列生成代码 ...

  3. 干货 | 云智慧透视宝Java代码性能监控实现原理

    这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...

  4. eclipse 4.5.2 源码修改 格式化Java代码

    注:本文代码基于eclipse4.5.2 1. 需求:在换电脑之后,如何不用配置eclipse就可以很快进入开发呢,并保持原来的编码规范. 2. 方法:修改eclipse源码 分别修改了两个jar包2 ...

  5. [置顶] oracle 数据库表中转换成java代码

    --数据库中字段java代码 select col.TABLE_NAME,replace(initcap(col.TABLE_NAME),'_', '')   , 'private '||decode ...

  6. [置顶] oracle 快速查询数据库各种信息、及转换对应java代码

    1 查询表中数据量 select 'select '||''''||t.TABLE_NAME||''''||' as table_name, count(*) from '|| t.TABLE_NAM ...

  7. 如何用70行Java代码实现深度神经网络算法

    http://www.tuicool.com/articles/MfYjQfV 如何用70行Java代码实现深度神经网络算法 时间 2016-02-18 10:46:17  ITeye 原文  htt ...

  8. 200行Java代码搞定计算器程序

    发现了大学时候写的计算器小程序,还有个图形界面,能够图形化展示表达式语法树,哈哈;) 只有200行Java代码,不但能够计算加减乘除,还能够匹配小括号~ 代码点评: 从朴素的界面配色到简单易懂错误提示 ...

  9. java代码求阶乘n!

    面试过程中总是遇到要求写一段Java代码求阶乘.下面就是就是两种求阶乘 n! 的方法: 1.使用递归求解n! public int doFactorial(int n){ if(n<0){ re ...

随机推荐

  1. 转:Windows下交换CapsLock和左ctrl

    Windows下交换CapsLock和左ctrlHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout中添加Scanco ...

  2. Navicat 导出 表结构

    Navicat 导出 表结构 转自:https://www.cnblogs.com/xianxiaobo/p/10254737.html 1. 首先点击新建查询,然后输入下面的语句 SELECT CO ...

  3. 【转载】C#中使用double.TryParse方法将字符串转换为double类型

    在C#编程过程中,将字符串string转换为double类型过程中,时常使用double.Parse方法,但double.Parse在无法转换的时候,会抛出程序异常,其实还有个double.TryPa ...

  4. js 时间常用处理方法

    众所周知,JavaScript核心包含Data()构造函数,用来创建表示时间和日期的对象. 今天主要跟大家梳理一下,常用的时间.日期处理方法,方便大家使用和理解 格式化时间 老生常谈,大概会这么写 1 ...

  5. CSS-图片整合笔记

    注意点: 概念:图片整合技术( css sprite 或 精灵图).通过将多个图片融合到一张图片,然后通过CSS background 背景定位技术技巧布局网页背景 优势:减少 http iis 请求 ...

  6. 在DoNetCore MVC 中如何使用AutoMapper

    刚开始,按照在donet mvc 的方法写了一遍,发现行不通啊,于是百度了一下,找到这么一篇 https://stackoverflow.com/questions/41284349/automapp ...

  7. centos7 docker安装nginx

    1.查询nginx最新镜像 docker search nginx 2.下载镜像 docker pull nginx 3.创建目录 mkdir -p /software/nginx/html mkdi ...

  8. PHP中的十进制、八进制、二进制、十六进制

    我们平时用的都是十进制. 比如:987这个数字,其本质就是7*10^0+8*10^1+9*10^2 个位数上的7,1就是1,十位上的8,1就是10,百位上的9,1是100 echo '<br&g ...

  9. Linux 常见 RAID 及软 RAID 创建

    RAID可以大幅度的提高磁盘性能,以及可靠性,这么好的技术怎么能不掌握呢!此篇介绍一些常见RAID,及其在Linux上的软RAID创建方法. mdadm 创建软RAID mdadm -C -v /de ...

  10. php环境Unknown column '*' in 'field list'解决方案

    在使用pymysql 做网站往数据库插入数据时发现如下错误:pymysql.err.InternalError: (1054, "Unknown column '*' in 'field l ...