是否有 MiniZinc Predicate 来模拟时间相关的资源边界(如累积)?

Is there a MiniZinc Predicate to model time-dependant resource bounds (like cumulative)?

我想找到一个最佳代码来模拟某些持续时间消耗某些资源(如累积)的事件,但这些资源会随时间变化(每个时隙的资源计数数组)。

我正在尝试对典型的调度问题进行建模,其中某些事件在特定时间发生,这些事件会消耗无法超过的有限资源量。资源会随时间变化,因此像 cumulative 这样的谓词不适合。我试图检查每个时间段是否都没有超出资源,但与内置的累积谓词相比,它的速度非常慢,我想知道是否有类似的东西:

%ensures that resources never exceed the time-dependant bound b.
predicate desired_cumulative(array[int] of var int: s, array[int] of var int: d, array[int] of var int: r, array[int] of var int: b)

您可以通过使用最大可能的资源可用性作为累积限制,并添加额外的固定任务来移除部分可用资源,从而为不同的资源可用性建模。

例如,假设您有一个资源,它在时间 0 时从 13 开始,在时间 5 时达到 15,然后从时间 10 下降到 12,直到时间结束(比如 100)。要对此建模,请使用固定容量为 15(最大)的 cumulative 并添加两个任务,在 time-span 0 到 5 中,资源使用量为 2 (15-13),以及一个任务在时间跨度 10 到 100 中,资源使用量为 3 (15-12)。