首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsprit入门:概念性建议

jsprit入门:概念性建议
EN

Stack Overflow用户
提问于 2020-02-05 22:03:48
回答 1查看 310关注 0票数 4

对不起,这不是一个具体的问题。由于我刚接触Jsprit,我需要一些关于如何开始解决问题的概念性帮助。

我的例子:

我一开始只有一辆车有开始和结束的位置。有几个优先提货位置和只有一个仓库位置交付。车辆应驾驶1天,然后休息2天,而不是另一天的开始/结束时间为每一天。开始/结束-位置定义为每天(1和4)。车辆可以在第一天返回其末端位置,包括一个负载,但在第四天,最后的位置应该是仓库卸货(并返回空)。

我想取回尽可能多的项目基础上的优先权和车辆2d负荷约束,如果有太多的皮卡,他们将被忽视。这辆车每天可以返回仓库卸货几次。我还想在第四天开始之前改变收件的优先次序。

  • 有什么想法吗?
  • 在区分皮卡和送货之间有什么好处/不同之处,而不是使用货件吗?
  • ,我想定义两辆车,而不是定义休息时间,但我不想在第一天卸货。我读到这可以用2个驱动程序来完成,看看API和驱动程序设置,我不知道怎么做。驱动程序类有一个home属性,但这是一个字符串,中断只能在vehicle.
  • Should上定义--我在第一条路径上运行了两次并删除了已在第4天运行的拾取器?+合并结果afterwards?
  • How以实现仅在负载达到85%时才能加载的约束?
  • 如何实现一个约束,即第4天的最后一个位置应该是返回结束位置之前的最后一个位置(如果所有的拾取都完成了,甚至<85% )?

EN

回答 1

Stack Overflow用户

发布于 2020-05-27 17:36:24

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

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

代码语言:javascript
复制
// 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中。

代码语言:javascript
复制
// 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)

然后,运行您的解决方案。

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60084782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档