[英]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.