使用Choco Solver在Var数组中至少有一个Var等于X.

时间:2016-08-12 18:48:28

标签: constraint-programming choco

我正在使用Choco Solver并给出一个int变量数组,我想要一个约束来检查数组中至少有一个var等于静态值......

类似于IntConstraintFactory#count的内容,但使用以下文档:

/**
 * Let N be the number of variables of the VARIABLES collection assigned to value VALUE;
 * Enforce condition N >= LIMIT to hold.
 * <p>
 *
 * @param VALUE an int
 * @param VARS  a vector of variables
 * @param LIMIT a variable
 */
public static Constraint at_least(int VALUE, IntVar[] VARS, IntVar LIMIT) {
    return new Constraint("At least", /* help here ? */);
}

有人知道它是否存在或我如何有效地实施它?

1 个答案:

答案 0 :(得分:1)

如果您想在Choco Solver中发布约束atLeast(VALUE,VARS, LIMIT),只需发布​​count(VALUE,VARS,X)X初始域[0,VARS.length]的IntVar,然后发布arithm(X,">=",LIMIT)。这将完成这项工作。没有必要为此实现特定约束。

如果您想检查VARS中的至少一个变量是否等于VALUE,则更简单,只需将count(VALUE, VARS, X)作为初始域发布[1,VARS.length]X。因此,VALUE的最小出现次数至少为1。无需创建第二个变量和算术约束。