【问题标题】:Constraint choco约束巧克力
【发布时间】:2014-12-28 11:22:52
【问题描述】:
我正在使用 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。
【问题讨论】:
标签:
java
constraint-programming
choco
【解决方案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));
// ...