【发布时间】:2020-07-30 20:40:58
【问题描述】:
我们正在使用定制的 VRP 教程示例来优化服务工程师的日常路线,这些工程师前往客户那里执行某些维修和安装任务。我们确实有时间窗口,我们会在未来数周内优化 1000 多项任务。
我们的(简化的)领域模型包括:
- 工程师 - 负责所有工作的人
- 任务 - 在某个地点完成的单一工作任务
- DailyRoute - 给定日期的工程师路线,由任务链表组成
作为新要求,我们现在必须支持两名工程师并行完成同一任务。
我们目前的计划是通过为第二个工程师创建子任务来实现这一点,并实施一个规则,即他们的到达时间必须与主要任务相同。 然而,这是有问题的,因为将其中一项相互依赖的任务移动到不同的时间(例如,不同的 DailyRoute)将大多违反上述约束。
到目前为止,我们提出了以下想法:
- 只允许单个任务在同一天作为其他任务的指定路线移动到 DailyRoute
- 可以通过 SelectionFilter 完成
- 使用 CompositeMoves 将两个并行任务同时移动到不同的日期
- 我们是否需要自定义 MoveIteratorFactory 来选择连接的任务?
- 或者这可以用 CartesianProductMoveSelector 代替吗?
- 我们可以使用附近的选择来进行第二次移动,以选择与第一次移动的新指定日期相同的日期(移动当时是否已经完成)?
【问题讨论】:
标签: optaplanner vehicle-routing