我目前正在构建一个类似于 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/