0

我找到了一个 Choco求解器作为使用 Java 的约束编程软件。我想了解更多。我做了一些基本的例子。但是现在我想尝试一些更复杂的东西(Pritsker project scheduling alg),我需要你的帮助。为了取得进展,我必须了解如何对矩阵变量的行施加约束。确切地说,我需要保持行总和等于 1(任务只启动一次)。我已经尝试过了,但没有成功。你能帮忙吗?我确实使用 Choco 2.1.5 我的矩阵如下:

int n = 10; // projects
int m = 12; // time horizon in months
IntegerVariable[][] x = new IntegerVariable[n][m];
int i, j;
for (i = 0; i < n; i++){
    for (j = 0; j < m; j++){
        x[i][j] = Choco.makeIntVar("x_" + i +"_" + j, 0, 1, Options.V_ENUM);
        model.addVariable(x[i][j]);
    }
}
4

2 回答 2

1

您应该首先将变量定义为rowscolumns

然后,您可以使用文档继续。这样的事情可能会有所帮助:

IntegerVariable[][] rows;
int n; //number of rows
for(int i=0; i<n; i++)
   model.addConstraint(eq(sum(rows[i], 1));
于 2014-05-21T21:48:44.697 回答
0

要对行添加约束,您应该转置矩阵并将约束应用于行:

transposed = ArrayUtils.transpose(x);
for(int i=0; i<n; ++i){
    model.sum(transposed[i], "=", 1);
}
于 2020-11-22T08:23:17.483 回答