0

我有 n 个任务要安排。时间范围是 0..T 个周期。每个任务在执行时都会消耗资源。资源是有限的,可以是不同的类型。我在 choco 2.1.5 中使用以下决策变量:

IntegerVariable[][] x = new IntegerVariable[n][m]; // decision variables

int i, j;
for (i = 0; i < n; i++){
    for (j = 0; j < T; j++){
        x[i][j] = Choco.makeIntVar("x_" + i +"_" + j, 0, 1,Options.V_ENUM);
                    model.addVariable(x[i][j]);         
    }
}

如果任务 i 在周期 j 开始,则变量 x[i][j] 等于 1,否则等于 0。如果多个任务可以在同一时期运行,它们必须满足资源容量限制。如果在求解器发现任务应该在哪个时间段开始之前给定任务,我必须为资源添加额外的约束。因此,在给定的时间段内,我必须通过运行任务来计算所有资源的使用情况。而且我必须在解决模型之前以某种方式知道它们何时开始和结束。

换句话说,如何实现由以下总和组成的约束: BigSigma {i | start[i]≤t<start[i]+duration[i]} resourcesRequiredByTask[i] ≤ capacity, (∀ time t),其中索引 i 是任务编号。

4

0 回答 0