Choco的约束

时间:2014-05-21 21:27:22

标签: java constraint-programming choco

我发现Choco solver作为使用Java的约束编程软件。我想更多地了解它。我做了一些基本的例子。但现在我想尝试更复杂的东西(Pritsker项目调度算法),我需要你的帮助。为了进步,我必须了解如何将约束放在矩阵变量的行上。确切地说,我需要保持行的总和等于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]);
    }
}

2 个答案:

答案 0 :(得分:1)

您应首先将变量定义为rowscolumns

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

IntegerVariable[][] rows;
int n; //number of rows
for(int i=0; i<n; i++)
   model.addConstraint(eq(sum(rows[i], 1));

答案 1 :(得分:0)

要在行上添加约束,应转置矩阵并将约束应用于行:

transposed = ArrayUtils.transpose(x);
for(int i=0; i<n; ++i){
    model.sum(transposed[i], "=", 1);
}