【问题标题】: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));
    // ...
    

    【讨论】:

    • 方法“sum”从何而来?我似乎找不到它的导入。
    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2022-10-25
    • 2020-12-22
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多