使用Choco求解器建模约束

时间:2018-12-05 15:37:39

标签: constraint-programming choco

我想在CHOCO中建模以下约束。任何帮助请

    //cSelected[i]=1 ==> ∀ j∈{1,…,i-1} xCategory[i]!= xCategory[j] 
      cSelected[i]=0, otherwise

这就是我想要做的

        int[] x  =      new int[]{0,  1, 0,  0, 1, 0};
        int[] xCategory  = new int[]{3,  1, 2,  2, 3, 0};
        int[] xCategorySize  = new int[]{0,  100, 200,  300};
        IntVar[] cSelected = model.intVarArray("d", 6, 0, 1);

    // 3. Post constraints
        // i want to add and post this constraint:
        //cSelected [i]=1 ==> ∀ j∈{1,…,i-1} xCategory[i]!= xCategory[j] 
        //cSelected [i]=0, otherwise

        for (int i=0; i<x.length;i++)
        sum += (1-x[i]) * cSelected[i].getValue() * xCategorySize[xCategory[i]];

1 个答案:

答案 0 :(得分:0)

您需要为每个测试xCategory[i]!= xCategory[j]验证约束,并将验证结果放入BoolVar中包含的BoolVar[][] cMatrix中。然后,在该矩阵中发布每个向量or的{​​{1}}约束,并将其保存在BoolVar[](这也是cSelected,而不是BoolVarArray)中:

IntVarArray