使用 or-tools cp-sat 包括任务期间的机器停机时间

问题描述 投票:0回答:1

我想以特定的方式包括停机时间,例如官方教程中的作业车间示例使用 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继续处理呢?


编辑:我实际上想用它来解决更复杂的调度问题:一个灵活的作业车间,有大量的任务和许多可能的启动时间和机器停机时间。因此,我正在寻找一种可以很好地解决灵活作业车间问题

的解决方案
python scheduling or-tools cp-sat-solver resource-scheduling
1个回答
0
投票

如果跨越休息时间,您可以延长持续时间,而无需引入休息时间间隔。

请参阅此处的代码: https://github.com/google/or-tools/blob/stable/ortools/sat/docs/scheduling.md#intervals-spanning-over-breaks-in-the-calendar

© www.soinside.com 2019 - 2024. All rights reserved.