OptaPlanner –具有真实道路距离的车辆路线

在现实世界中,车辆路径问题(VRP)中的车辆必须走这条路:它们不能在客户之间直线行驶。 大多数VRP研究论文和演示都乐于忽略此实现细节。 和我一样,过去。 尽管使用道路距离(而不是空中距离)不会对VRP的NP硬性产生很大影响,但确实会带来一些额外的挑战。 让我们来看看这些挑战。

道路距离数据集

首先,我们需要现实的数据集。 不幸的是,在VRP研究社区中,缺乏具有道路距离的公共VRP数据集。 VRP Web很少,例如位于29个位置的巴伐利亚数据集,但没有什么严重的。 因此,我必须根据以下要求自己生成一些实际的数据集:

  1. Google Maps用作道路,在数据集中每对位置之间的真实距离以km为单位。
    • 例如,在小道路上合理的时候使用高速公路。
  2. 对于每个数据集,生成一个空中距离变量和一个道路距离变量,以比较结果。
  3. 生成多个数量级的相似数据集,以比较可伸缩性。
  4. 为VRP中的车辆容量限制添加合理的车辆容量和客户需求。

我最终生成了比利时的数据集,其中包含城市,城镇和郊区的位置。 最大的一个有2750个位置。 稍后我可能会添加USA数据集的道路变体,这些变体最多可达10万个位置。

比利时数据集未解决

通过使用基于OpenStreetMap的出色的Java库GraphHopper ,查询实际道路距离相对容易。 只要整个道路网(比利时只有200MB)可以加载到内存中,它也很快。 加载北美的整个道路网络(6GB)更具挑战性。 我将这些数据集提交到VRP Web,以便其他研究人员也可以使用它们。

所有这一切都发生 OptaPlanner的VRP示例开始解决它之前。 在求解过程中,距离已经在查找表中可用。 一旦我们开始生成具有1000个或更多位置的数据集,预先计算每个位置对之间的所有距离可能会带来内存和性能问题。 我将在下一个博客中解释这些以及补救措施。

空中距离与道路距离

为了清楚起见,我将集中在数据集belgium-n50-k10.vrp上,该数据集具有50个位置和10个车辆,每个车辆的容量为125。 OptaPlanner有5分钟的时间来解决这两种变体(空中和道路距离)。

使用空中距离 (可根据纬度和经度计算欧几里得距离)会导致:

比利时n52-airSolution

总距离22.99并不重要,因为它不在通用的度量单位内,而且因为我们的车辆无论如何也无法从点到点飞行。 我们需要将此空距解决方案应用于真实道路网络 (如下所示),以了解真实距离:

比利时路N51-空气解决方案

现在,让我们将上方的空中距离解决方案与下方的道路距离解决方案进行比较。

比利时路n50路解决方案

道路距离解决方案所需的时间减少了108.45公里,因此几乎提高了5%! 这就是世界上最密集的道路网络之一(比利时的道路网络):在更稀疏的道路网络上,收益可能会更多。

结论

使用实际距离而不是空中距离确实很重要。 用空距离求解VRP,然后应用道路距离不是最理想的。

但是,我们真的可以预先计算大型数据集中的每个位置对吗? 敬请关注。

翻译自: https://www.javacodegeeks.com/2014/09/optaplanner-vehicle-routing-with-real-road-distances.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自旋锁

什么是自旋锁? 自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。 …

关于如何在PSA众多请求号中查找数据是属于哪一条。

其中有两个TCODE: RSTSODS与RSTSODS,我们可以查找数据源的PSA表,然后在SE16中可以看到。 另外我们对PSA点击管理,一般会出现在窗口上面出现PSA的表名。 当然有些不在的话,那就去查找那两个TCODE。转载于:https://www.cnblogs.com/…

TCP握手为什么需要三次通信

TCP三步握手three way (or three message) handshake 是TCP核心知识点,很长一段时间内我无法理解为什么TCP建立连接需要三次通信,而不是两次或者四次或者更多次。我翻了很多问答和博客,他们说的都很有道理,但是借来的火&#xff0…

小程序用户拒绝授权解决方法

众所周知,小程序进入首先都要进行微信授权的,那万一用户不小心点了拒绝按钮怎么办呢?不要慌,官方早已预料到此情况,并提供了api供开发者使用,下面就一起来研究下api吧 一、API接口 wx.openSetting(OBJECT)…

揭示垃圾收集暂停的时间长度

有几种方法可以改善您的产品。 一种方法是仔细跟踪用户的体验并在此基础上进行改进。 我们确实自己应用了此技术,并再次花了一些时间查看不同的数据 除了我们追求的许多其他方面之外,我们还提出了一个问题“延迟GC触发应用程序的最坏情况是什么”。 为了…

异步导致UI句柄增加的解决办法

在很多操作中,都会使用到异步线程,具体怎样使用在这不说了,网上有很好的说明;本人通过Delegate.BeginInvoke实现异步调用,完成后对UI控件进行设值等,还有System.Timers.Timer都一样,使用的是线程…

[转]android ListView详解

本文转自:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 由于google doc 很多人都打不开,故更新了源码下载地址 【源码下载】----2011-01-18 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容&#xff…

JS对象操作

一、String常用操作 1.截取 substr(start,length) //返回从指定位置开始的指定长度的字符串。 substring(start,end) //返回两个指定的位置之间的字符串。 slice(start,end) //包括字符串 stringObject 从 start 开始(包括 start)到 end 结束&#xff0…

JBoss BPM Suite 6.0.3版本的5个实用技巧

上周,红帽发布了标记为6.0.3的JBoss BPM Suite的下一版本,已订阅的用户可以在其客户门户中使用。 如果您对该版本的新增功能感到好奇,请在客户门户网站上在线查看版本说明和其余文档 。 我们正在寻找一些简单的方法来开始使用此新版本&…

package-lock.json

package.json确定依赖的范围,package-lock.json将这个范围精确到具体版本。主要是为了解决在各个环境中得到确定的node_modules,如果只依赖package.json因为该文件声明的是直接依赖的范围,它无法将直接依赖固定在某个特定版本,也无…

Linux启动管理

启动管理系统运行级别 运行级别:含义0 :关机1 :但用户模式,可以想象为windows的安全模式,主要用于系统修复2 :不完全的命令行模式,不含NFS服务3 :完全的命令行模式,就是标…

VB网站收集

1.vb源码 http://hi.baidu.com/aboutvb/home转载于:https://www.cnblogs.com/sode/archive/2011/11/05/2236883.html

Django学习---原生ajax

Ajax 原生ajax Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件)。 XmlHttpRequest对象的主要方法: a. void open(String …

The Little Schemer-周而复始之Y组合子由来

什么是递归? (define length(lambda (l)(cond((null? l) 0)(else (add1 (length (cdr l)))))))以上是length函数的实现用递归的形式计算出数据集合l的长度。 如果没有define这种赋值操作我们怎么定义length函数?换句话说我们怎么使用匿名函数完成递归…

霸主–统治和管理API的地方

今天我们生活在一个越来越分散的世界中。 如今的计算机系统不再是在随机桌子下面的某些硬件上运行单个部门项目,而是大规模,集中甚至分散地运行。 监视和管理的需求从未改变,但是随着时间的推移变得越来越复杂。 如果将所有这些跨功能功能都放…

Django操作与内容

一、路由系统 1.如何实现伪静态 在cnblogs中:https://www.cnblogs.com/wangwei5979/p/11160708.html 而我们自己写的: http://127.0.0.1:8000/up_studnet/?id12同样是网页 为何cnblogs这样设计 原因: 1就是因为比较美观 2由于使用搜索引擎来…

监控 SQL Server 的运行状况

Microsoft SQL Server 2005 提供了一些工具来监控数据库。方法之一是动态管理视图。动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的运行状况、诊断问题和优化性能。 常规服务器动态管理对象包括: dm_db_*:数据库和…

RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—单词注释版)

part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 14 Header Field Definitions(规定) This section(部分,章节) defines(规定定义) the syntax(语法) and semantics(语意) of all standard(标准) HTTP/1.1 header fields. For entity-…

Java开发人员应该知道的5种错误跟踪工具

随着Java生态系统的不断发展,可满足不断增长的请求和用户对高性能需求的Web应用程序成为了新型的现代开发工具。 具有快速新部署的快速节奏环境需要跟踪错误并获得应用程序行为的洞察力,而传统方法无法维持这种水平。 在这篇文章中,我们决定收…

Emacs中的Color Theme以及字体设置

先上一张效果图: Color Theme用的是gnome2, 字体用的是Visual Studio自带的Consolas。我使用的环境是WindowsCygwinEmacs23.2。 1,安装Color Theme插件 首先,从http://download.savannah.gnu.org/releases/color-theme/下载color theme 6.6.0版本。 接着…