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

在利用 CP 优化器的典型应用中,问题的未知数将以受限变量的形式表示。 最常用的受约束变量类别是受约束整数变量类别。 IlcIntExp 、 是一组用于表达整数变量约束条件的类的根类。
该类中的大多数成员函数都包含 "assert语句。 有关宏 "NDEBUG(打开或关闭这些 "assert语句的方法)的解释,请参阅Assert 和 NDEBUG 概念。
域
受约束整数表达式的域由其子表达式的域计算得出。 例如,表达式 "x+y的域包含范围 "[x.getMin()+y.getMin(),
x.getMax()+y.getMax()]。
受约束整数变量是一种受约束表达式,它存储其域,而不是从子表达式中计算域。 受约束整数变量的域包含 "IlcInt类型的值。 如果数值是连续的,该域用区间表示,否则用整数枚举表示。
受限整数变量可与算术运算符相结合,生成受限整数表达式。 每个受约束的整数表达式都有一个最小值和一个最大值。 如果表达式的最小值等于最大值,我们就说表达式是固定的。
受约束整数表达式的域可以简化为空。 在这种情况下,就会出现失败,因为不可能有任何解决方案。
表达式与变量
IlcIntVar是从 "IlcIntExp派生出来的子类。 另一种描述方式是,受约束变量是一个恰好存储其域的受约束表达式。 您可以通过以下两种方式之一,将受限整数表达式(计算其域)转换为受限整数变量(存储其域):"IlcIntVar的转换构造函数或 "IlcIntVar的赋值操作符。
溢出和下溢
CP 优化器通过这些方式管理整数溢出和下溢:
+、"*、"-"、"/在 CP 优化器中不会导致溢出。IlcIntExp::getSize returns IlcIntMax whenever
max - min is greater than IlcIntMax.IlcIntMin),CP 优化器就会用 "IlcIntMin替换该约束。IlcIntMax),CP 优化器就会用 "IlcIntMax替换该界限。
0/0评估为区间 "
[IlcIntMin..IlcIntMax]。回溯和可逆性
为该类定义的、能够修改受约束变量的所有成员函数和运算符都是可逆的。 特别是,约束发布函数所做的更改是通过可逆赋值进行的。 因此,当 CP 优化器回溯时,任何受限变量的值、域和约束条件都会恢复。
修饰符
有关 "IlcIntExp的修改器,请参阅CP Optimizer 中的传播事件概念。
更多信息,请参阅CP 优化器中的传播概念。
修饰符是一个成员函数,它可以缩小受约束整数表达式的域。 修改器不存储,与约束相反。 如果受限整数表达式是一个受限整数变量,则修改器调用导致的修改将存储在其域中。 否则,修改器的效果会传播到受约束整数表达式的子表达式中。 如果域为空,调用成员函数 "IloCP::fail将触发故障。 修改器通常用于定义新的约束条件类别。
另请参阅:
IlcAbs, IlcIntExpIterator, IlcIntSet, IlcIntVar, IlcIntVarArray, IlcMax, IlcMin, IlcScalProd, IlcSquare, IlcSum, 操作员+, 操作员/, 操作符*, 操作员, 操作符<<
| 方法概要 | |
|---|---|
public IlcInt | getMax() const |
public IlcInt | getMin() const |
public IlcInt | getSize() const |
public IlcInt | getValue() const |
public | IlcIntExp(IlcConstraint bexp) |
public IlcBool | isFixed() const |
public void | setMax(IlcInt max) const |
public void | setMin(IlcInt min) const |
public void | setRange(IlcInt min, IlcInt max) const |
| 方法详细信息 |
|---|
CP 优化器中的约束布尔表达式可以看作是一个 0-1(即二进制)约束整数表达式,其中 "IlcFalse对应 0,"IlcTrue对应 1。 该构造函数创建了一个约束整数表达式,该表达式等于参数 "bexp的真值。 换句话说,您可以使用此构造函数将约束条件转换为约束整数表达式。
这样的受约束整数表达式就可以像其他受约束整数表达式一样使用。 因此,我们可以表达约束条件的总和。 例如,下面的代码表达了三个变量不可能都相等的意思。
m.add((x != y) + (y != z) + (z != x) >= 2);
该成员函数返回调用对象域的最大值。
该成员函数返回调用对象域的最小值。
如果调用的约束整数表达式对象是固定的,则该成员函数返回该对象的值;否则,CP 优化器将抛出一个异常("IloCP::Exception实例)。 为避免 "getValue出错,可使用 "isFixed测试表达式。
如果调用的约束整数表达式是固定的,即其最小值等于最大值,则该成员函数返回 "IlcTrue。 否则,成员函数返回 "IlcFalse。
该成员函数从调用约束表达式的域中删除所有大于 "max的元素。 如果域因此变为空,则当前目标失败,引擎返回。 否则,如果域被修改,就会生成范围和域传播事件。 此外,如果调用的受限整数表达式变成固定值,也会产生值传播事件。 该成员函数的效果是可逆的。
该成员函数从调用约束表达式的域中删除所有小于 "min的元素。 如果域因此变为空,则当前目标失败,引擎返回。 否则,如果域被修改,就会生成范围和域传播事件。 此外,如果调用的受限整数表达式变成固定值,也会产生值传播事件。 该成员函数的效果是可逆的。
该成员函数从调用约束表达式的域中删除所有小于 "min或大于 "max的元素。 如果域因此变空,则当前目标失败,引擎会返回。 否则,如果域被修改,就会生成传播事件 "range和 "domain。 此外,如果调用的受限整数表达式变成固定值,也会产生值传播事件。 该成员函数的效果是可逆的。