java - 使用 Optaplanner 和 Google map 进行车辆路线规划

标签 java gwt google-maps-api-3 optaplanner

我目前正在构建一个类似于 Optaplanner 车辆路线示例的应用程序。不同之处在于:它是基于网络的,可视化和距离计算将使用 GWT Google Maps V3 方向服务。就像 optaplanner 博客文章一样:Visualizing Vehicle Routing with Leaflet and Google Maps

我实际上对计算每个位置之间的距离有点困惑,我应该实时计算吗?我的意思是实时是首先加载位置(大约 350 个位置),然后计算每个位置之间的距离(这将导致 350 x 350 = 122500 方向请求)在开始求解阶段之前。

我可以想到的另一种方法是,计算每个位置的距离并将其存储在数据库中,然后在开始求解阶段之前加载数据。但如果我选择这种方式,如何处理位置变化?即添加新位置或删除现有位置?

我还阅读了有关谷歌地图 API 限制的信息,它指出该服务每 24 小时仅可用于 2500 请求。如何解决这个限制呢?

任何评论和答案将不胜感激。谢谢并致以问候。

最佳答案

我已成功将 MapPoint 与 MPMileage 和 CDXZipStream 一起使用,以使用 MapPoint 和 CDXZipStream 维护位置数据库(地址 + 坐标)。使用 MPmileage 和 MapPoint 维护两点之间的行驶时间。 Microsoft 不再销售 MapPoint,但您也许可以在 eBay 上找到副本或找到替代品。 MPmileage 和 CDX 让我的工作变得更轻松。我能够按照自己的意愿询问 MapPoint - 它提供每秒大约 8 趟的行程时间 - 除了您的时间外没有任何限制。我的数据库现在包含超过 600,000 次行程和 15,000 个地点。此外,这些产品需要花费一些美元。我为我提到的三个产品花费了大约 300 美元,比 Google 商业许可证要少得多。 Maptitude 可以替代 MapPoint,但您可能无法像使用 Maptitude 那样控制街道速度。

在运行解决方案之前,我有一个查询,确保所需的坐标已进行地理编码,并且潜在的线路(两点之间的旅行)位于数据库中。如果没有,我将使用我提到的工具填写或更新值。我的特定方法不利于按需工作,但您可以自己编写这样的过程。

我通过施加一些合理的假设来限制搜索空间,例如就我而言,行程没有超过 13 英里。您也许可以施加类似的约束来限制您的搜索空间。在任何时候,我可能只使用大约 60,000 个行程时间,因为只加载所需的时间 - 其余的时间保留在数据库中,以备将来需要时使用。在 OptaPlanner 解决方案中,这些是事实,而不是实体或变量。这些事实提供了两点之间的旅行时间。

希望这有帮助。

关于java - 使用 Optaplanner 和 Google map 进行车辆路线规划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745674/

相关文章:

java - 在 docker 实例上使用 akka 远程处理与 artere 时出错

java - GWT 使用 ImageResource 创建图像

java - GWT - 无法找到入口点类

google-maps-api-3 - 谷歌地图上的 100k 或更多标记没有聚类

java - 在谷歌地图上动态添加标记簇

java - 在 ExceptionMapper<Throwable> 中捕获 JsonMappingException

Java JTable 一次将一个单元格保存到数据库中

java - 检查列表是否已更改

java - 由于欢迎文件而未触发过滤器

jquery - 谷歌地图标记奇怪地拉伸(stretch)问题