问题标签 [jsprit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optaplanner - 使用 OptaPlanner 进行大规模优化 - 具有目标时间窗的 VRPPD
我是交通优化和 OptaPlanner 的新手,但我需要解决一个问题,即大约 1,400 辆汽车需要在特定时间从 9000 个地点取货并运送到 500 个目的地。我的目标是制定一个运输计划,利用一辆车去多个目的地接载,并使用多辆车去目的地。带有 OptaPlanner 的 Bicycle messenger/TSPPD 问题似乎暗示了可以满足我需求的结构。
我是 Java 新手,但对编程并不陌生——我过去曾使用 C、C++ 和 SQL 进行编程。我也看过jsprit,我正在寻找最好的路径。Drools 之所以吸引人,是因为它似乎提供了一种有凝聚力的方式来组织不断变化的约束。我已经从时间/距离矩阵开始——应该很快就会准备好。
非常感谢任何意见、想法或建议!我只想从一个好的方向开始,如果有的话。
jobs - JSprit 中的相关职位
是否可以在 jsprit 中处理作业(在本例中为服务)之间的关系?
例如,一项作业必须与一项或多项其他作业同时开始。或者一项作业不得在另一项作业结束之前开始(正常顺序)。
如果没有,您知道其他可以处理此类限制的 java 库吗?
谢谢!
java - JSprit算法软硬时间窗口
我有带有时间窗口的服务列表。是否可以以必须满足某些时间窗口(硬时间窗口)而其他时间窗口配置为软时间窗口的方式配置 JSprit?
提前感谢您的帮助
window - 具有多个时间窗口的 Jsprit VRP
我尝试使用 jsprit 来解决具有多个TimeWindows
. 因此,我创建了一个新的约束类,其中包含一个将“TimeWindowsNotAvailable”类与服务相关联的映射。
“TimeWindowsNotAvailable”类包含TimeWindows
无法完成服务的列表(例如,客户不在家等)。主要问题是newAct.getArrTime()
始终为 0.0,尽管您可以在 VRP 的解决方案中看到arrTime
不是 0.0。
有没有人知道我如何解决这个问题或者TimeWindows
更难实现?
java - jsprit VRP 相关工作hard Contraint
是否可以通过硬约束在同一路线上进行两次或多次装运。
如果没有,您知道其他可以处理此类限制的 java 库吗?
谢谢!
optaplanner - 病人运输
我正在寻找算法,jsprit 或 optaplanner 项目似乎是为了解决我的问题。我们只使用 Java。我看了一下 jsprit 自行车示例,一个入口点,现在我需要解决一个围绕病人运输的问题。
- 担架可以承载床、轮椅或有效的病人。如果他们去同一个区域并且来自同一个区域,他可以同时携带一个轮椅和一个有效的。
- 长途,一张床需要2个担架
- 推床者(一种固定在床上的电动卡车)更换1个担架
- 移动床对于长距离最有效,但也可以用于短距离
- 搬运工只能帮助床位(不适用于轮椅或有效患者)
- 完成后,移动床保持原位或空地返回公园区域(可能 1..n 个地方)
通用规则 :
- 每个代理的总运输时间必须尽可能相等(公平)
- 传输是时间窗口的,延迟必须尽可能短(取决于优先级)
- 每次都有新的传输请求
- 最好使用移动床而不是 2 个担架
你能告诉我如何开始解决这种问题。你认为有可能吗?
问候
routing - 具有多个站点、作业类型和目的地的路线优化
我是路由优化的新手,非常感谢您在使用 jsprit 解决以下业务需求方面的帮助。我从 Stefan Schröder 那里得到了一些反馈,他帮助我学习了一些关于 jsprit 的基础知识。我将首先解释业务需求,然后问几个问题。
目标是安排需要在一个月内完成的维护工作列表。需要为整个月准备每日时间表。这里的目标是每天执行最大数量的工作。
- 一个地区有 4 个仓库,每个仓库
- 每个区域有大约 70 个仓库,总共 300 个仓库
- 该区域内每个仓库与仓库之间的距离是已知的
- 每个区域有3-4辆不同类型的车辆,共12辆
- 区域内的车辆只能服务于该区域内的仓库
- 区域内的车辆具有相同的起点,恰好是终点
- 车辆没有任何容量、取货或交付要求
- 车辆仅用于运输将执行维护工作的工人
- 每辆车的平均速度已知
- 大约有 80 种维护工作类型
- 每种作业类型都需要以分钟为单位的已知时间
- 维护作业不必在特定时间开始
- 每月大约有 200 项维护工作需要执行
- 这些工作可以在任何仓库
- 同一个仓库可以在同一天或不同天进行不止一项工作
- 一天内有 3 个八小时班次。上午 6 点至下午 2 点、下午 2 点至晚上 10 点和晚上 10 点至上午 6 点
- 车辆将在轮班开始时离开仓库仓库,并在八小时轮班内访问尽可能多的仓库
- 车辆在执行作业时必须在仓库等待,然后才能移动到下一个仓库或返回到堆场仓库
我的基本理解是,维护工作可以定义为jsprit中的服务,并且可以为每辆车设置启动/返回时间。此外,成本矩阵可用于增加车辆和仓库之间关系的时间和距离。我的问题是:
- 每个维护作业都需要定义为一项服务,因此将有 200 个服务对象传递给 VRP 求解器,对吗?
- VehicleTypeImpl 具有 addCapacityDimension()、setCostPerDistance() 和 setCostPerTime() 方法。这些到底是什么以及它们如何应用上述案例?
- Service.Builder 有 addSizeDimension() 方法。它有什么作用?
- costMatrixBuilder 具有添加 TransportDistance 和 TransportTime 的方法。这些方法使用了哪些单位,我该如何使用它们?
- 对于每个站点,需要定义一个坐标并将其传递给每个 VehicleImpl 的 setStartLocationCoordinate() 方法。这是正确的吗?
- vehicleBuilder 有 setLatestArrival(double maxDuration); 这里使用哪个单位?
我非常感谢解决上述案例的任何帮助。
谢谢,亚当
编辑1:
几个问题
A. setEarliestStart() 和 setLatestArrival() 方法接受双精度值,如何将最早出发和最晚到达的日期指定为这些方法的实际日期?例如,开始时间是 2014 年 11 月 28 日下午 2 点,结束时间是当天晚上 10 点。
B. 有没有办法以分钟为单位指定服务时间?
C. VehicleTypeImpl.Builder.setMaxVelocity(double inMeterPerSeconds) 方法期望最大速度,有没有办法指定车辆的平均速度?
D、所有车辆实行三班倒;这是否意味着我必须定义同一辆车三次,每个班次都有不同的最早出发和最晚到达时间?
E. 由于作业可以在一个月内的任何时间执行,每个作业的时间窗口是否会作为月份的开始和结束传递给 Service.Builder.setTimeWindow() 方法?
java - 多辆没有容量和成本矩阵的车辆
我正在尝试使用两辆相同类型且从同一位置开始的车辆来创建 VRP。我希望解决方案以最具成本效益的方式为问题中的每辆车创建一条路线。我正在使用 GraphHopper 计算每个服务位置之间的道路距离和时间,并使用该信息创建一个运输成本矩阵。
我的问题是所有服务都放在一条路线上,而第二辆车从未使用过。在输出中,我可以看到问题包含两辆车,但解决方案只显示了一条路线,一辆车。
如果我设置车辆的容量和服务的大小,我可以同时使用这两种车辆。我知道如果我不指定它们,它们将被忽略,但这会导致所有服务使用相同的车辆吗?
我错过了什么吗?
如果需要,我可以发布代码示例。
谢谢!
jsprit - 多趟车辆路线 (VRPMT)
我对 jsprit 很陌生,想知道是否有一种简单的方法可以进行多次旅行的车辆路线。
示例:1 个仓库提供大量 0-5 磅的包裹(约 100 个)和 1 辆能够一次承载 15 磅的车辆。我有一个 240 分钟的窗口,所以我希望这辆车可以多次旅行。每次旅行后,车辆可以从仓库获得更多包裹。
任何帮助表示赞赏。
java - 使用 HardActivityConstraint 在 Jsprit 中强加订单
在重新解决以前解决的问题的场景中(当然,使用一些新数据),通常不可能重新分配车辆的第一个任务。驱动程序已经在路上,任何新的解决方案都必须考虑到:
- 工作必须是他的(不能分配给另一辆车)
- 最初分配给他的活动在未来的解决方案中必须保持不变
为简单起见,我使用的是单个车辆场景,并且只尝试强加第二个项目符号(即确保某个活动将成为解决方案中的第一个)。
这就是我定义约束的方式:
这就是我构建算法的方式:
结果并不好。我只获得分配了一项工作的解决方案(具有所需活动的工作)。在调试中很明显,作业插入迭代考虑了许多似乎可以完全解决问题的可行选项,但归根结底,算法返回的最佳解决方案不包括其他作业。
更新:更令人惊讶的是,当我在超过 5 辆车的情况下使用约束时,它可以正常工作(最差的结果是 1 辆车)。
如果需要,我很乐意附上更多信息。
谢谢扎克