0

我基本上仍在尝试创建具有灵活的任务时间线(具有一定的持续时间),您可以说任务之间的“弹性”链接,例如任务 B 必须在任务 B 之后的 5 到 10 分钟之间。任务也可以t重叠,因为一个人每时每刻只能做一件事。

还有一些额外的功能我可能需要稍后合并,以防它们在某些时候相关或将相关:

  • 任务持续时间可能在一定范围内变得灵活
  • 某些任务可能会锁定到某个时间点
  • 您可以添加新人,以便您可以同时完成两项任务

我的问题是我的方法很容易陷入局部最优。

我目前所做的是优化任务的开始时间,并有一个硬约束,即有多少链接超出范围以及它们是否重叠。这似乎运作良好,并且大多数情况下很快就找到了一个不会破坏任何硬约束的解决方案。我的附加软约束应该尽量减少整个过程的持续时间。例如,如果任务 B 和 C 之间的链接是 20-100 分钟,那么硬分不关心链接是 20 分钟还是 100 分钟。但是通常 20 比 100 好。但是在处理复杂的树状任务依赖关系时,最好使用 80 分钟的链接将其他任务放在该间隙中,以便稍后的三分之一任务可以更早开始。因此,仅仅最小化链接长度并不是一种可行的方法。但问题是,一旦链接在范围内,就没有动力将其移出该范围,以便以后找到更好的解决方案。我陷入了局部最优。

因此,我现在正在考虑如何解决这个问题。我一直在考虑的方法以及我希望获得反馈的地方是创建一个新的 CompositeMove,它可以移动两个链接的任务。这改善了情况,但不能很好地扩展,因为一旦三个或更多任务紧密联系在一起,我们就会陷入相同的情况。

我一直在考虑的另一件事是尝试实施一项需要一项任务、拉伸链接并将任务置于间隙中的动作。不过,我还没有真正考虑过这一点。

我也弄乱了不同的本地搜索方法,但这也没有真正帮助。但我认为他们无论如何也帮不上忙。

我还查看了OptaPlanner 车辆路线和客户访问之间的关系,但是虽然它帮助我理解了问题,但它并没有真正帮助解决问题。

4

0 回答 0