1

我面临着一些现实世界的 VRP 优化问题,并且想尝试一下 jsprit。我有一组具有相关技能限制的工作;一组用户来为具有技能限制和时间窗口的工作提供服务;和以上所有基于纬度的坐标。

我一直在运行一些示例,例如VRPWithBackhaulsExample,所以我可以看到我需要设置一组 ConstraintManagers 但我在将我的域映射到这些领域的 jsprit 概念时遇到了麻烦:

  • 如何用 JSprit 输入来表示经纬度?这些示例似乎使用了二维空间中的点。看来我需要使用 VehicleRoutingTransportCosts,但我不清楚如何做到这一点。
  • 是否有在非交付模型中使用时间窗口的示例?我知道这篇文章,但它似乎与我上面描述的模型不同。

我只是想指出正确的方向,欢迎任何指导。

4

1 回答 1

3

如何用 JSprit 输入来表示经纬度?

您可以使用正常的纬度/经度(例如51.5287718, -0.2416806)输入。如果没有明确设置距离矩阵,Jsprit 使用欧几里得距离计算器。请参阅此处和此处的代码

除了默认的欧几里得距离计算器,他们还有一个使用Haversine 公式的大圆距离/成本计算器。您只需要在构建问题之前调用 .setRoutingCost(new GreatCircleCosts()) ,请参见此处

如果您需要道路距离,那么您必须自己生成距离矩阵。您可以使用诸如Google Maps Distance Matrix APIGraphhopper Matrix API之类的东西(由于 Google Maps API 许可限制,我们目前使用后者)例如,您可以扩展AbstractForwardVehicleRoutingTransportCosts类,对距离矩阵服务进行 API 调用,然后执行类似的操作vrpBuilder.setRoutingCost(instanceOfYourCustomDistanceMatrix)

如果您不想在 Java 级别工作,Open Door Logistics (ODL) Studio非常适合这种类型的事情。查看车辆路由和调度教程,了解 ODL 如何使用 Graphhopper 为您构建距离矩阵。

是否有在非交付模型中使用时间窗口的示例?

不知道你在问什么,但时间窗口也适用于服务工作。

无耻插件:如果您不想编写任何 Java 并且不想设置 ODL,可以在smartrouting.io使用我们的网络应用程序。

于 2017-08-28T17:40:27.783 回答