繁体   English   中英

约束巧克力

[英]Constraint choco

我正在使用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。

如果我对您的理解正确,则要确保整个矩阵的总和等于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));
// ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM