我发现了一款Choco作为约束编程软件,可以与solver一起使用。我想学得更多。我已经做了一些基本的例子。但现在我想尝试一些更复杂的东西(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]);
}
}发布于 2014-05-22 05:48:45
您应该首先将变量定义为rows和columns。
然后,您可以使用this文档继续操作。下面这样的代码可能会有所帮助:
IntegerVariable[][] rows;
int n; //number of rows
for(int i=0; i<n; i++)
model.addConstraint(eq(sum(rows[i], 1));发布于 2020-11-22 16:23:17
要在行上添加约束,应转置矩阵并将约束应用于行:
transposed = ArrayUtils.transpose(x);
for(int i=0; i<n; ++i){
model.sum(transposed[i], "=", 1);
}https://stackoverflow.com/questions/23794115
复制相似问题