了解JSprit VRP约束

时间:2017-08-24 18:00:33

标签: jsprit

我面临一些现实世界的VRP优化问题,并希望为jsprit带来麻烦。我有一组具有相关技能限制的工作;一组用户为技能限制和时间窗口的工作提供服务;以及所有上述的基于lat-lon的坐标。

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

  • 如何根据JSprit输入表达lat-lons?看起来这些例子在二维空间中使用了点。看来我需要使用VehicleRoutingTransportCosts,但我不清楚如何做到这一点。
  • 是否有在非交付模式中使用时间窗口的示例?我知道this post,但它看起来与我上面描述的模型不同。

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

1 个答案:

答案 0 :(得分:1)

  

如何根据JSprit输入表达lat-lons?

您可以使用普通的纬度/经度(例如51.5287718, -0.2416806)输入。如果没有明确设置距离矩阵,Jsprit使用欧几里德距离计算器。请参阅code herehere

除了默认的欧几里德距离计算器外,它们还有一个使用Great Circle Distance/Costs CalculatorHaversine formula。您只需在构建问题之前调用.setRoutingCost(new GreatCircleCosts()),请参阅here

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

之类的操作 如果您不想在Java级别工作,

Open Door Logistics (ODL) Studio适用于此类事情。查看Vehicle Routing and Scheduling Tutorial以了解ODL如何使用Graphhopper为您构建距离矩阵。

  

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

不确定你在问什么,但时间窗也很适合服务工作。

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