JSPRIT入门:概念建议

  • 本文关键字:入门 JSPRIT jsprit
  • 更新时间 :
  • 英文 :


对不起,这不是一个特定的问题。由于我是Jsprit的新手,我需要一些关于如何开始解决问题的概念帮助。

我的例子:

我开始时只有一辆车有起点和终点位置。有几个具有优先级的提货位置,只有一个交货的仓库位置。车辆应行驶 1 天,然后休息 2 天,而不是另一天,每天给定开始/结束时间。开始/结束 - 头寸每天定义(1 和 4(。车辆可以在第 1 天返回其最终位置,包括装载,但在第 4 天,最后一个位置应该是要卸载的仓库(并空车返回(。

我想根据优先级和车辆 2d 负载约束拾取尽可能多的物品,如果拾取太多,它们将被忽略。车辆每天可以返回仓库进行多次卸货。我还考虑在第 4 天开始之前更改取件优先级。

  • 有什么想法吗?
  • 单独定义取件和交货而不是使用货件之间是否有好处/区别?
  • 我想定义 2 辆车而不是定义休息时间,但我不想在第一天卸货。我读到这可以使用 2 个驱动程序来完成,查看 API 和我不知道如何操作的驱动程序设置。 https://discuss.graphhopper.com/t/3-questions-endlocation-and-multiple-vehicles/414/8 Driver 类有一个 home 属性,但这是一个字符串,只能在车辆上定义中断。
  • 在运行第 4 天之前,我是否应该运行求解器两次并删除第一条路径中已有的拾音器? + 之后合并结果?
  • 如何实现仅在负载增加 85% 时才加载的约束?
  • 如何实现一个约束,即第 4 天的最后一个位置应该是返回终点位置之前的仓库(如果所有拾取都完成,甚至 <85%(?

我将每周运行两次解决方案,并删除第一天要完成的任何停止,因为下一个解决方案不再需要它们。如果卡车可以在第二天的任何地方启动,则需要在第二天更新开始位置。否则,如果两天都从仓库开始,则两天的开始和结束位置相同。

首先,您要定义车辆类型和车辆:

// 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();

接下来,创建作业。服务作业从仓库启动,提货作业可以从商店位置开始并投递到目标位置。有了这个,我将定义pickupsservice作业,然后将它们添加到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。此外,查看成本矩阵可以帮助您找到解决方案。(查看:使用成本矩阵(

然后,运行解决方案。

干杯!

相关内容

  • 没有找到相关文章

最新更新