我正在使用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 ? */);
}
有人知道它是否存在或我如何有效地实施它?
答案 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
。无需创建第二个变量和算术约束。