我面临一些现实世界的VRP优化问题,并希望为jsprit带来麻烦。我有一组具有相关技能限制的工作;一组用户为技能限制和时间窗口的工作提供服务;以及所有上述的基于lat-lon的坐标。
我一直在运行一些像VRPWithBackhaulsExample这样的例子,所以我可以看到我需要设置一组ConstraintManagers但是我在将这些域映射到这些领域的jsprit概念时遇到了麻烦:
我只是想指出正确的方向,欢迎任何指导。
答案 0 :(得分:1)
如何根据JSprit输入表达lat-lons?
您可以使用普通的纬度/经度(例如51.5287718, -0.2416806
)输入。如果没有明确设置距离矩阵,Jsprit使用欧几里德距离计算器。请参阅code here和here。
除了默认的欧几里德距离计算器外,它们还有一个使用Great Circle Distance/Costs Calculator的Haversine formula。您只需在构建问题之前调用.setRoutingCost(new GreatCircleCosts()),请参阅here。
如果您需要道路距离,那么您必须自己生成距离矩阵。您可以使用Google Maps Distance Matrix API或Graphhopper Matrix API之类的内容(由于Google Maps API许可限制,我们目前使用后者),例如您可以扩展AbstractForwardVehicleRoutingTransportCosts
类,对距离矩阵服务进行API调用,然后执行vrpBuilder.setRoutingCost(instanceOfYourCustomDistanceMatrix)
Open Door Logistics (ODL) Studio适用于此类事情。查看Vehicle Routing and Scheduling Tutorial以了解ODL如何使用Graphhopper为您构建距离矩阵。
是否有在非交付模式中使用时间窗口的示例?
不确定你在问什么,但时间窗也很适合服务工作。
无耻插件:如果您不想编写任何Java并且不想设置ODL,则可以在intelligentrouting.io使用我们的网络应用。