我基本上still trying to create a timeline of tasks(具有一定的持续时间)具有灵活性,您可以说任务之间的“弹性”链接,例如任务B必须在任务B之后5到10分钟之间。任务也不能重叠,因为一个人每时每刻都只能处理一件事。
我可能还需要稍后加入一些其他功能,以便我们在此处包含这些功能,以防它们在某些时候具有相关性:
我的问题是我的方法容易陷入局部优化中。
我目前所做的是优化任务的开始时间,具有一个硬约束,即链接在外部范围内以及它们是否重叠。这似乎运作良好,并且大多数快速找到一个解决方案,不会破坏任何硬约束。 我的附加软约束应该尽量减少整个过程的持续时间。如果是任务B和C之间的链接是20-100分钟,如果链接是20或100分钟,则硬分数不关心。但通常20比100好。但是当处理复杂的树状任务依赖时,最好使用80分钟的链接将一些其他任务放在那个间隙中,以便后面的第三个任务可以提前开始。因此,最小化链接长度不是一种有效的方法。 但问题是,一旦链接在范围内,就没有动力将其移出该范围,以后可能会得到更好的解决方案。我被困在当地的最佳状态。
因此我现在正在思考如何解决这个问题。我一直在思考的方法以及我希望得到反馈的方法是创建一个新的CompositeMove来移动两个链接的任务。这改善了这种情况,但由于我们在三个或更多任务紧密相关的情况下最终处于相同的情况,因此无法很好地扩展。
我一直在考虑的另一件事是尝试实施一项任务,拉伸链接并将任务放在差距中。虽然我没有真正想到这一点。
我也使用不同的本地搜索方法,但这也没有真正帮助。但我认为无论如何他们都无法真正帮助。
我也看了OptaPlanner vehicle routing and relations between customer visits但是虽然它帮助我理解了这个问题但它并没有真正帮助解决方案。