1

我正在使用 Choco Solver 并给定一个 int vars 数组,我想要一个约束来检查数组中的至少一个 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 ? */);
}

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

4

1 回答 1

1

如果您想atLeast(VALUE,VARS, LIMIT)Choco Solver中发布约束,您可以简单地发布count(VALUE,VARS,X)X初始域为 IntVar [0,VARS.length],然后发布arithm(X,">=",LIMIT)。这将完成这项工作。不需要为此实施特定的约束。

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

于 2016-08-21T07:57:22.033 回答