对不起,这不是一个具体的问题。由于我刚接触Jsprit,我需要一些关于如何开始解决问题的概念性帮助。
我的例子:
我一开始只有一辆车有开始和结束的位置。有几个优先提货位置和只有一个仓库位置交付。车辆应驾驶1天,然后休息2天,而不是另一天的开始/结束时间为每一天。开始/结束-位置定义为每天(1和4)。车辆可以在第一天返回其末端位置,包括一个负载,但在第四天,最后的位置应该是仓库卸货(并返回空)。
我想取回尽可能多的项目基础上的优先权和车辆2d负荷约束,如果有太多的皮卡,他们将被忽视。这辆车每天可以返回仓库卸货几次。我还想在第四天开始之前改变收件的优先次序。
?
发布于 2020-05-27 17:36:24
我将每周运行两次解决方案,并删除第一天完成的任何停止,因为它们不再是下一个解决方案所需的。如果卡车可以在第二天在任何地方启动,那么第二天就需要更新启动位置。否则,如果两天都从仓库开始,那么两天的开始和结束位置都是相同的。
首先,您要定义您的车辆类型和车辆:
// Vehicle Type
VehicleTypeImpl vehicleType = VehicleTypeImpl.Builder.newInstance("Your vehicle type")
.addCapacityDimension(0, capacity)
.setMaxVelocity(maxSpeed) // in meters per second
.setCostPerDistance(value)
.build();
VehicleImpl vehicle = VehicleImpl.Builder.newInstance(fleet[i])
.setType(vehicleType)
.setEarliestStart(start).setLatestArrival(end)
.setStartLocation(location) // Warehouse location
.setEndLocation(location) // warehouse location
.build();接下来,创造你的工作。服务作业从仓库开始,拾取作业可以从商店位置开始,然后下降到目标位置。这样,我将定义pickups和service作业,然后将它们添加到VRP中。
// Service Jobs
Service.Builder.newInstance(instanceName)
.setName("Unique Name").setLocation(
new Location.Builder()
.newInstance().setId("Unique ID")
.setCoordinate(new Coordinate(x, y))
)
.addSizeDimension(0, 1) // accounts for vehicle capacity
.build();
// Shipment Jobs
Shipment.Builder.newInstance(instanceName)
.setName("Unique Name")
.setPickupLocation(
new Location.Builder()
.newInstance().setId("Unique ID")
.setCoordinate(new Coordinate(x, y))
)
.setDeliveryLocation(
new Location.Builder()
.newInstance().setId("Unique ID")
.setCoordinate(new Coordinate(x, y))
)
.addSizeDimension(0, 1)
.build();
// You can add priorities to jobs how you like with .setPriority()可以循环遍历作业,并根据类型创建任意一个作业,并将其添加到VRP中。此外,查看成本矩阵可以帮助您解决问题。(退房:Using a cost matrix)
然后,运行您的解决方案。
干杯!
https://stackoverflow.com/questions/60084782
复制相似问题