0

我正在使用 choco API 来解决问题。我需要的是编写一个约束,使我的所有变量的总和等于 1。这段代码保持行的总和等于 1:

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

但是我需要编写一个代码,使我的所有元素矩阵的总和(行的总和)等于 1,而不是每行的总和 = 1。

4

1 回答 1

1

如果我理解正确,您希望确保整个矩阵的总和等于 1。

然后,您可以使用 ArrayList(“all”)将所有 IntegerVariables 收集到一个列表中,然后将约束添加到“all”。您的示例不完整,例如列数,所以我假设有 n 列并且它是一个 0/​​1 矩阵。这是一个例子:

// ...
ArrayList<IntegerVariable> all = new ArrayList<IntegerVariable>();
int n = 5; // number of rows and columns
IntegerVariable[][] rows = new IntegerVariable[n][n];
for(int i = 0; i < n; i++) {
  for(int j = 0; j < n; j++) {
    rows[i][j] = makeIntVar("rows["+i+","+j+"]", 0, 1);
    all.add(rows[i][j]);
  }
}
// convert ArrayList all to an array
model.addConstraint(eq(sum(all.toArray(new IntegerVariable[1])),1));
// ...
于 2014-12-29T06:40:33.337 回答