| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |

该类的实例是模型中的计数约束。 您可以使用该类的实例来计算约束变量数组中几个值的出现次数。 可以使用此类的实例来强制规定数组的受约束变量的取值,从而将取各个值的受约束变量限制在一定数量。
例如,如果我们有五辆车要涂成三种颜色,那么我们可以把车称为 "c1、"c2、"c3"、"c4"、"c5",把颜色称为 "p1、"p2、"p3。如果我们可以允许不超过三辆车涂成 "p1,正好三辆车涂成 "p2,不超过一辆车涂成 "p3,那么我们就可以用这个约束条件来非正式地表示我们的问题:
卡 = [[0,3], [3,3], [0,1]] 值 =p1,p2,p3] 变量 =c1,c2,c3,c4,c5]
更正式地说,数组 "cards中的受约束变量等于数组 "vars中的值在数组 "values中出现的次数。 更确切地说,对于每个 "i,"cards[i]等于 "vars数组中 "values[i]"的出现次数。 传播此约束后,"cards[i]的最小值至少等于 "vars中包含的与 "values[i]中的值绑定的变量个数;而 "cards[i]的最大值最多等于 "vars中包含的在其域中包含 "values[i]中的值的变量个数。
cards和 "values数组的长度必须相同;否则,当启用异常时,Concert Technology 会在支持 C++ 异常的平台上抛出异常。
When an instance of this class is created by a constructor with only cards and vars as arguments (that is, there is no values argument), then the array of values that are being counted must be an array of consecutive integers starting with 0 (zero). 在这种情况下,对于每个 "i,"cards[i]等于 "vars数组中 "i"的出现次数。 在传播此约束后,"cards[i]的最小值至少等于 "vars中包含的与值 "i绑定的变量个数;而 "cards[i]的最大值最多等于 "vars中包含的在其域中包含 "i的变量个数。
为了使约束生效,必须使用模板 "IloAdd或成员函数 "IloModel::add将其添加到模型中,并使用成员函数 "IloAlgorithm::extract提取算法模型。
该类中的大多数成员函数都包含 "assert语句。 有关宏 "NDEBUG(打开或关闭这些 "assert语句的方法)的解释,请参阅Assert 和 NDEBUG 概念。
注意:逻辑约束中不能使用此约束。
另请参阅:
| 方法概要 | |
|---|---|
public IloDistributeI * | getImpl() const |
public | IloDistribute() |
public | IloDistribute(IloDistributeI * impl) |
public | IloDistribute(const IloEnv env, const IloIntExprArray cards, const IloIntArray values, const IloIntExprArray vars, const char * name=0) |
public | IloDistribute(const IloEnv env, const IloIntExprArray cards, const IloIntExprArray vars, const char * name=0) |
从 "IloConstraint继承的方法 |
|---|
getImpl, IloConstraint, IloConstraint |
从 "IloIntExprArg继承的方法 |
|---|
getImpl, IloIntExprArg, IloIntExprArg |
从 "IloNumExprArg继承的方法 |
|---|
getImpl, IloNumExprArg, IloNumExprArg |
| 方法详细信息 |
|---|
此构造函数在模型中创建一个计数约束。 您必须使用模板 "IloAdd或成员函数 "IloModel::add将此约束添加到模型中,然后使用 "IloAlgorithm::extract为算法提取模型,以便将该约束考虑在内。
cards和 "values必须长度相同,否则 Concert Technology 会抛出异常 "InvalidArraysException。
此构造函数在模型中创建一个计数约束。 您必须使用模板 "IloAdd或成员函数 "IloModel::add将此约束添加到模型中,然后使用 "IloAlgorithm::extract为算法提取模型,以便将该约束考虑在内。