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

该类的实例是优化引擎中的自定义推理器。
该类的目的是允许用户在默认搜索中添加受限整数变量推理算法。
自定义推理器的推理算法由其虚拟成员函数 "execute()定义。 默认搜索会调用该函数。 有两种模式可以影响搜索中自定义推理器的执行。
第一种模式是 "手动 "模式,在这种模式下,用户可以指定执行自定义推理器的频率。
第二种模式是自动模式,由默认搜索单独决定何时执行自定义推理。 在自动模式下,用户需要指定执行自定义推理器的 "成本"。
请注意,在这两种情况下,自定义推理器都是针对搜索树的每一片叶子执行的。 这样,自定义推理器就能保证模型解中的不变量。
有关自定义推论器的更多信息,请参阅CP Optimizer 中的自定义推论器概念。
| 方法概要 | |
|---|---|
protected void | addPropagationCost(IloNum c) |
public virtual IloNum | estimateCost(IloNum bound) |
public virtual void | execute() |
public | IlcCustomInferencerI(IlcCPEngine solver, IloBool manualMode=IloFalse, IloInt numberOfSkippedNodes=20) |
public | ~IlcCustomInferencerI() |
| 方法详细信息 |
|---|
该构造函数创建了一个 "IlcCustomInferencerI类的实例。 由于这是一个抽象类,因此不应直接调用该构造函数。 该构造函数将在子类的构造函数中调用。
布尔值 "manualMode指定自定义推理器应在手动还是自动模式下使用。 选择手动模式时,"numberOfSkippedNodes指定了两次调用 "execute()函数之间搜索必须探索的节点数。
子类的析构函数会自动调用该析构函数。 它会释放调用对象使用的内存。
该成员函数将在 "execute()函数中调用,以声明计算成本。
要使用自定义推理器的自动模式,必须重新定义该虚拟成员函数。 在变量当前状态下,它应该能估算出调用虚拟 "execute()函数的成本。 在自动模式下使用自定义推理器时,默认搜索会调用 "estimateCost函数。 在手动模式下使用自定义推理器时,默认搜索不会调用此虚成员函数,因此无需重新定义。
表示成本的单位可以作为默认搜索调用虚拟 "execute()函数次数的软控制。 根据经验,定义成本统一的起点可以是一个传播周期的平均成本。
可以使用参数 "bound来避免不必要的成本估算。 任何大于或等于 "bound的返回值都被视为相同。 因此,在计算成本估算时,只要知道估算值大于或等于 "bound,返回值 "bound即可,无需完成成本估算的精确计算。
在定义新的自定义推理器类时,必须重新定义该纯虚拟成员函数。 它定义了调用自定义推理器时必须如何缩小受限整数变量的域。 默认搜索会调用它。
当您打算在自动模式下使用自定义推理器时,虚拟 "execute()函数应声明它在执行过程中花费的 "成本"。 This can be done by calling the member function addPropagationCost(IloNum c) in the execute() function. 注意 "execute()函数可能会失败。 无论失败与否,都应根据其支出情况更新相应的成本。