簡體   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