| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
您可以使用函数 "IlcDistribute来计算约束变量数组中几个值的出现次数。
此函数创建并返回一个约束条件。 在您发布之前,该限制不起任何作用。 发布该约束后,数组 "cards中的约束变量等于数组 "vars中出现的数组 "values中值的个数。 更确切地说,对于每个 "i,"cards[i]等于 "vars数组中 "values[i]"的出现次数。 传播此约束后,"cards[i]的最小值至少等于 "vars中包含的固定为 "values[i]值的变量个数;而 "cards[i]的最大值最多等于 "vars中包含的在其域中包含 "values[i]值的变量个数。
cards和 "values数组的长度必须相同,否则 CP 优化器将抛出异常("IloException实例)。
当该函数只有两个参数时(即没有 "values参数),则计数的数值数组必须是以 0(零)开头的连续整数数组。 在这种情况下,对于每个 "i,"cards[i]等于 "vars数组中 "i"的出现次数。 在传播此约束后,"cards[i]的最小值至少等于固定为 "i的 "vars中包含的变量个数;而 "cards[i]的最大值最多等于 "vars中包含的、在其域中包含 "i的变量个数。
如果没有明确说明过滤级别,CP 优化器将对该约束使用默认过滤级别。 可选参数 "level有两个值: IlcBasic或 "IlcExtended。 其最低值为 "IlcBasic。 传播过程中域的缩小量取决于该值。 请参阅 "IlcFilterLevel,了解过滤器级别及其对约束传播的影响。
IlcExtended比 "IlcBasic导致更多的域缩减;运行时间也更长。
添加这些限制
您只能在 CPsearch 中添加这些约束,即在目标("IlcGoal实例)或约束("IlcConstraint实例)中添加。 如果您要在约束中寻找类似功能以添加到模型中,请参阅IBM®ILOG® Concert Technology 中的 "IloDistribute和 "IloCount。
编程提示
以下语句:
s.addIlcDistribute(cards,vars));
的效率更高,但等同于下面的代码:
IlcIntsize =cards.getSize();
IlcIntArrayvalues(size);
forIlcInti = 0; i < size; i++)
values[i] = i;
s.addIlcDistribute(cards,values, vars));另请参阅: