我想以特定的方式包括停机时间,例如官方教程中的作业车间示例使用 OR-Tools CP-Sat 求解器和 Python。我想让机器开始处理任务,然后停机,然后继续完成相同的任务。
类似问题的答案:https://stackoverflow.com/a/75901853/22301210 仅显示我们如何确保任务不会在机器停机时结束。 给出的答案包括以下内容
if machine == 1:
model.AddLinearExpressionInDomain(
all_tasks[job_id, task_id].end,
cp_model.Domain.FromIntervals([[0, 2], [4, horizon]]))
但是,这意味着任务在停机期间仍然可以处理,之后就会结束。
这里问了与我相同的问题:https://groups.google.com/g/or-tools-discuss/c/ZMHvaoK2Z_Q?pli=1。给出的答案是在停机期间包含一个 NewIntervalVar:
machine_to_intervals[0].append(model.NewIntervalVar(0, 10, 10, 'weekend_0'))
但是,在这种情况下,机器无法在停机之前开始处理任务并在停机之后结束它。它必须在停机之前完成处理,或者在停机之后开始处理。
如果我们要在机器 1 上处理 4 个时间单位的任务,并且该机器在时间间隔 [2,4] 内停机。如何才能让机器从0到2时间处理完,然后再从4到6继续处理呢?
编辑:我实际上想用它来解决更复杂的调度问题:一个灵活的作业车间,有大量的任务和许多可能的启动时间和机器停机时间。因此,我正在寻找一种可以很好地解决灵活作业车间问题
的解决方案如果跨越休息时间,您可以延长持续时间,而无需引入休息时间间隔。