跳至主内容
框架 无框架

类IlcIntervalSequenceVar

定义文件: ilcp/cpext.h
IlcIntervalSequenceVar的地图IlcIntervalSequenceVarIlcIntervalSequenceVar
区间序列变量类。

该类的实例是优化引擎中的一个受限区间序列变量。 您可以使用成员函数 "IlcIntervalSequenceVar IlcCPEngine::getIntervalSequence(const IloIntervalSequenceVar) const从模型中的 "IloIntervalSequenceVar实例中获取 "IlcIntervalSequenceVar实例。

该类的目的是对一组区间("IlcIntevalVariable的实例)进行排序。 序列是一连串的时间间隔,在调度模型中与时序相关联。 优化引擎中与区间序列变量相关的基础约束数据结构是头尾图。

通过该类的成员函数,可以查看区间在序列中的存在状态、区间属于哪个集合(尾部、头部、未排序、头部候选或尾部候选)、头部和尾部的最早和最晚区间,以及头部或尾部区间的近邻。 修改器可设置区间的存在、延长头部和尾部,或删除头部或尾部候选项。 传播是由序列中出现间隔以及头尾延伸时的事件触发的。 这些事件与 delta 域相关。 成员函数提供了一些有用的函数,用于约束部分子序列,而不受任何时间顺序的影响。

有关区间变量和用于调度的搜索 API 的更多信息,请参阅CP Optimizer 中用于调度的搜索 API 概念。

方法概要
public voidextendHead(const IlcIntervalVar var) const
public voidextendTail(const IlcIntervalVar var) const
public IlcCPEnginegetCPEngine() const
public IlcIntervalVargetDeltaPresence() const
public IlcIntervalVargetEarliestInHead() const
public IlcIntervalVargetEarliestInTail() const
public IlcIntervalVargetEarliestNewInHead() const
public IlcIntervalVargetEarliestNewInTail() const
public IlcIntervalVargetLatestInHead() const
public IlcIntervalVargetLatestInOldHead() const
public IlcIntervalVargetLatestInOldTail() const
public IlcIntervalVargetLatestInTail() const
public IlcIntervalVargetLatestPresentInHead() const
public IlcIntervalVargetLatestPresentInTail() const
public IlcIntervalVargetOneEarlierInHead(const IlcIntervalVar var) const
public IlcIntervalVargetOneEarlierInTail(const IlcIntervalVar var) const
public IlcIntervalVargetOneLaterInHead(const IlcIntervalVar var) const
public IlcIntervalVargetOneLaterInTail(const IlcIntervalVar var) const
public IlcIntgetType(const IlcIntervalVar var) const
public IlcBoolisAbsent(const IlcIntervalVar var) const
public IlcBoolisBefore(const IlcIntervalVar pred, const IlcIntervalVar succ) const
public IlcBoolisCandidateHead(const IlcIntervalVar var) const
public IlcBoolisCandidateTail(const IlcIntervalVar var) const
public IlcBoolisEarlierInHead(const IlcIntervalVar earlier, const IlcIntervalVar later) const
public IlcBoolisEarlierInTail(const IlcIntervalVar earlier, const IlcIntervalVar later) const
public IlcBoolisFirst(const IlcIntervalVar a) const
public IlcBoolisFixed() const
public IlcBoolisIn(const IlcIntervalVar var) const
public IlcBoolisInHead(const IlcIntervalVar var) const
public IlcBoolisInTail(const IlcIntervalVar var) const
public IlcBoolisLast(const IlcIntervalVar a) const
public IlcBoolisPresent(const IlcIntervalVar var) const
public IlcBoolisPrevious(const IlcIntervalVar prev, const IlcIntervalVar next) const
public IlcBoolisSequenced(const IlcIntervalVar var) const
public IlcBoolisSequenced() const
public voidremoveCandidateHead(const IlcIntervalVar var) const
public voidremoveCandidateTail(const IlcIntervalVar var) const
public voidsetAbsent(const IlcIntervalVar var) const
public voidsetBefore(const IlcIntervalVar before, const IlcIntervalVar after) const
public voidsetPresent(const IlcIntervalVar var) const
public voidsetPrevious(const IlcIntervalVar prev, const IlcIntervalVar next) const
public IlcGoaltryExtendHead(const IlcIntervalVar var, IlcAny label=0) const
public IlcGoaltryExtendTail(const IlcIntervalVar var, IlcAny label=0) const
public voidwhenExtendHead(const IlcDemon d) const
public voidwhenExtendTail(const IlcDemon d) const
public voidwhenNotSequenced(const IlcDemon d) const
public voidwhenPresence(const IlcDemon d) const
内部枚举
IlcIntervalSequenceVar::Filter筛选 "IlcIntervalSequenceVar实例的头尾图子集。
内部班级
IlcIntervalSequenceVar::Iterator序列头尾图的迭代器类别。
方法详细信息

extendHead

public voidextendHead(constIlcIntervalVar var) const

This member function extends the head subsequence of the invoking instance of IlcIntervalSequenceVar with the argument var. 如果区间参数不是候选首部,则在调用序列中将其设置为不存在。 否则,参数区间将在头部被排序到最晚,优化引擎将触发序列上的扩展头部事件。

如果区间参数和调用序列中的最新头区间都存在,则该修饰符等同于说明该区间是调用序列中最新区间的直接后继区间。


extendTail

public voidextendTail(constIlcIntervalVar var) const

This member function extends the tail subsequence of the invoking instance of IlcIntervalSequenceVar with the argument var. 如果区间参数不是尾部候选参数,则在调用序列中将其设置为不存在。 否则,参数区间将被排序到尾部的最新位置,优化引擎将触发序列上的扩展尾部事件。

如果调用序列中的区间参数和尾部最新区间都存在,则该修饰符等同于说明该区间是调用序列中最新区间的直接后继区间。


getCPEngine

publicIlcCPEngine getCPEngine() const

This member function returns the instance of IlcCPEngine associated with the invoking instance of IlcIntervalSequenceVar.


getDeltaPresence

publicIlcIntervalVar getDeltaPresence() const

此成员函数返回在存在事件中被固定存在的 "IlcIntervalVar实例。 That is, it is the delta-domain corresponding with a whenPresence event on the invoking instance of IlcIntervalSequenceVar. 如果参数区间不存在,则不会从序列子集中删除:例如,如果参数区间存在,则会保留在头部子序列中。

请注意,该成员函数仅在执行与序列贡献事件相关的恶魔时有效。 在任何其他情况下,都不得使用该成员函数。

下面举例说明如何编写具有此类事件的恶魔:

 ILCDEMON1(MyPresenceEventDemon,
           IlcIntervalSequenceVar,seq) {
   IlcIntervalVarvar =seq.getDeltaPresence();
   IlcIntervalVarprev, next;
   如果var.isInHead()) {
     IlcIntervalSequenceVar::Iterator
     it(seq,IlcIntervalSequenceVar::Head,,var);
     是
     ifit.ok())
       prev = (*it);
     (it++)++;
     ifit.ok())
       next = (*it);
       .. 在标题传播中的 prev、next 和 var...
   } else ifvar.isInTail()) {
      .........与尾部情况类似.
   }
 }

getEarliestInHead

publicIlcIntervalVar getEarliestInHead() const

该成员函数返回 "IlcIntervalVar实例,该实例是调用 "IlcIntervalSequenceVar实例的头部子序列中最早的区间。 它位于序列中任何其他非缺失区间之前。 如果头部子序列为空,该函数将返回一个空句柄。


getEarliestInTail

publicIlcIntervalVar getEarliestInTail() const

This member function returns the instance of IlcIntervalVar which is the earliest interval in the tail subsequence of the invoking instance of IlcIntervalSequenceVar. 序列中的任何其他非缺省区间都在它之前。 如果尾部子序列为空,该函数将返回一个空句柄。


getEarliestNewInHead

publicIlcIntervalVar getEarliestNewInHead() const

该成员函数返回 "IlcIntervalVar的实例,该实例是优化引擎在序列上处理的头部扩展事件中调用 "IlcIntervalSequenceVar实例的头部中最早新出现的。 实际上,在扩展事件中新出现在头部的区间,即事件的域-Δ,是该区间与成员函数 "IlcIntervalSequenceVar::getLatestInHead()返回的区间之间的子序列。

注意:该成员函数仅在执行与序列中排名第一的事件相关的恶魔时有效。 在任何其他情况下,都不得使用该成员函数。

下面是如何使用该成员函数的代码示例。

 ILCDEMON1(MyHeadExtensionDemon,
           IlcIntervalSequenceVar,seq) {
  IlcIntervalVarprev =seq.getLatestInOldHead();
  IlcIntervalVarnext =seq.getEarliestNewInHead();
  forIlcIntervalSequenceVar::Iterator
     it(seq, 'IlcIntervalSequenceVar::Head,next);
     it.ok(); ++it) {
   IlcIntervalVarnext = *it;
   ifprev.getImpl())
    在下一条和上一条之间传播 .
   prev = next;
  }
  ......传播来自前一个...
}

getEarliestNewInTail

publicIlcIntervalVar getEarliestNewInTail() const

该成员函数返回 "IlcIntervalVar的实例,该实例是 "IlcIntervalSequenceVar的调用实例在优化引擎对序列处理的尾部扩展事件中最早新出现的尾部实例。 扩展事件尾部新出现的区间,即事件的域-Δ,是该区间与成员函数 "IlcIntervalSequenceVar::getLatestInTail()返回的区间之间的子序列。

注:该成员函数仅在执行与序列尾部扩展事件相关的魔鬼时有效。 在任何其他情况下,都不得使用该成员函数。

下面是如何使用该成员函数的代码示例。

 ILCDEMON1(MyTailExtensionDemon,
           IlcIntervalSequenceVar,seq) {
  IlcIntervalVarnext =seq.getLatestInOldTail();
  IlcIntervalVarprev =seq.getEarliestNewInTail();
  forIlcIntervalSequenceVar::Iterator
     it(seq,IlcIntervalSequenceVar::Tail,,prev);
     it.ok(); ++it) {
   IlcIntervalVarprev = *it;
   ifnext.getImpl())
    在下一条和上一条之间传播 .
   next = prev;
  }
  ......传播到下一个......
}

getLatestInHead

publicIlcIntervalVar getLatestInHead() const

该成员函数返回 "IlcIntervalVar实例,该实例是调用 "IlcIntervalSequenceVar实例的头部子序列中的最新间隔。 任何其他在头部的区间都在它之前,它也在序列中任何非缺席、非在头部的区间之前。 如果头部子序列为空,该函数将返回一个空句柄。


getLatestInOldHead

publicIlcIntervalVar getLatestInOldHead() const

该成员函数返回 "IlcIntervalVar的实例,该实例在优化引擎最后一次处理序列的头部扩展事件时,是 "IlcIntervalSequenceVar的调用实例的最新头部。 在上一次头部扩展事件(即事件的旧域)中,头部中的区间是成员函数 "IlcIntervalSequenceVar::getEarliestInHead()返回的区间与该成员函数返回的区间之间的子序列。 该子序列最终为空;在这种情况下,该成员函数返回一个空句柄。

注:该成员函数仅在执行与序列的扩展头事件相关的魔鬼时有效。 在任何其他情况下,都不得使用该成员函数。


getLatestInOldTail

publicIlcIntervalVar getLatestInOldTail() const

该成员函数返回 "IlcIntervalVar的实例,该实例是优化引擎最后一次处理序列尾部扩展事件时,调用 "IlcIntervalSequenceVar实例尾部的最新实例。 在上一次尾部扩展事件(即事件的旧域)中位于尾部的区间由成员函数 "IlcIntervalSequenceVar::getEarliestInTail()返回的区间和该成员函数返回的区间之间的子序列组成。 该子序列最终为空;在这种情况下,该成员函数返回一个空句柄

注意:该成员函数仅在执行与序列中排名第一的事件相关的恶魔时有效。 在任何其他情况下,都不得使用该成员函数。


getLatestInTail

publicIlcIntervalVar getLatestInTail() const

该成员函数返回 "IlcIntervalVar实例,该实例是调用 "IlcIntervalSequenceVar实例尾部子序列中的最新区间。 它在尾部任何其他区间之前,序列中任何非缺失、非尾部区间都在它之前。 如果尾部子序列为空,该函数将返回一个空句柄。


getLatestPresentInHead

publicIlcIntervalVar getLatestPresentInHead() const

该成员函数返回 "IlcIntervalVar实例,该实例是调用 "IlcIntervalSequenceVar实例的头部子序列中最新出现的区间。 任何其他存在于头部的时间间隔都在它之前。 如果头部子序列为空,或者头部不存在任何区间,该函数将返回一个空句柄。

该区间的主要用途是计算调用序列的候选头部区间集。 候选首部区间是一个非序列区间,它可以是 "最近出现的首部 "到 "最近出现的首部 "子序列中某个区间的直接后继区间。


getLatestPresentInTail

publicIlcIntervalVar getLatestPresentInTail() const

该成员函数返回 "IlcIntervalVar实例,该实例是调用 "IlcIntervalSequenceVar实例尾部子序列中最新出现的区间。 它先于尾部的任何其他本间隔。 如果尾部子序列为空,或者尾部不存在任何区间,该函数将返回一个空句柄。

该区间的主要用途是计算调用序列的候选尾区间集。 候选尾部区间是一个非序列区间,可以是 "尾部最新出现 "到 "尾部最新出现 "子序列中某一区间的直接前置区间。


getOneEarlierInHead

publicIlcIntervalVar getOneEarlierInHead(constIlcIntervalVar var) const

该成员函数返回参数 "var在调用实例 "IlcIntervalSequenceVar头部的最近前邻 "IlcIntervalVar实例。

如果 "var是调用序列首部的最早间隔,则此方法返回空句柄。 var必须位于头部,不能是空句柄。


getOneEarlierInTail

publicIlcIntervalVar getOneEarlierInTail(constIlcIntervalVar var) const

该成员函数返回参数 "var在调用实例 "IlcIntervalSequenceVar尾部最邻近的 "IlcIntervalVar实例。

如果 "var是调用序列尾部的最早间隔,则此方法返回空句柄。 var必须在尾部,不能是空句柄。


getOneLaterInHead

publicIlcIntervalVar getOneLaterInHead(constIlcIntervalVar var) const

该成员函数返回参数 "var在调用实例 "IlcIntervalSequenceVar头部的最近后邻 "IlcIntervalVar实例。

如果 "var是调用序列头部的最新区间,则此方法返回空句柄。 如果 "var为空句柄,则返回序列首部的最早间隔。 var必须位于头部。


getOneLaterInTail

publicIlcIntervalVar getOneLaterInTail(constIlcIntervalVar var) const

该成员函数返回参数 "var在调用实例 "IlcIntervalSequenceVar尾部最邻近的 "IlcIntervalVar实例。

如果 "var是调用序列尾部的最新区间,则此方法返回空句柄。 如果 "var为空句柄,则返回序列尾部的最早间隔。 var必须在尾部。


getType

publicIlcInt getType(constIlcIntervalVar var) const

This member function returns the type of the interval variable var, a member of the invoking instance of IlcIntervalSequenceVar. 有关序列中区间类型的更多信息,请参阅CP 优化器中的区间变量排序概念。


isAbsent

publicIlcBool isAbsent(constIlcIntervalVar var) const

如果作为调用实例 "IlcIntervalSequenceVar成员的参数 "var在序列中不存在,则该成员函数返回 "IlcTrue。 请注意,优化引擎已经或将要把区间变量传播为不存在。 否则,返回 "IlcFalse

如果参数 "var为空句柄,则该成员函数返回 "IlcFalse

序列中不存在的区间,但在存在事件的三角洲中,仍会被序列上的 "IlcIntervalSequenceVar::Iterator实例穿越。


isBefore

publicIlcBool isBefore(constIlcIntervalVar pred, constIlcIntervalVar succ) const

如果区间变量 "pred在调用序列中排序在区间变量 "succ之前,则该成员函数返回 "IlcTrue


isCandidateHead

publicIlcBool isCandidateHead(constIlcIntervalVar var) const

如果参数 "var(调用实例 "IlcIntervalSequenceVar的成员)是扩展序列头部子序列的候选者,则该成员函数返回 "IlcTrue。 尤其是,序列中并不缺少区间变量。 否则,返回 "IlcFalse


isCandidateTail

publicIlcBool isCandidateTail(constIlcIntervalVar var) const

如果参数 "var(调用实例 "IlcIntervalSequenceVar的成员)是扩展序列尾部子序列的候选对象,则该成员函数返回 "IlcTrue。 尤其是,序列中并不缺少区间变量。 否则,返回 "IlcFalse


isEarlierInHead

publicIlcBool isEarlierInHead(constIlcIntervalVar earlier, constIlcIntervalVar later) const

如果区间变量参数 "earlier和 "later位于调用实例 "IlcIntervalSequenceVar的头部,且 "earlier严格早于 "later,则该成员函数返回 "IlcTrue。 否则,返回 "IlcFalse

请注意,空句柄区间变量比序列头部的任何区间变量都要早。


isEarlierInTail

public 'IlcBool'isEarlierInTail(const 'IlcIntervalVar'刚才, const 'IlcIntervalVar'之后) const

如果区间变量参数 "earlier和 "later位于调用实例 "IlcIntervalSequenceVar的尾部,且 "earlier严格早于 "later,则该成员函数返回 "IlcTrue。 否则,返回 "IlcFalse

请注意,空句柄区间变量比序列尾部的任何区间变量都要早。


isFirst

publicIlcBool isFirst(constIlcIntervalVar a) const

如果区间变量 "a在调用序列中首先排序,则该成员函数返回 "IlcTrue


isFixed

publicIlcBool isFixed() const

如果调用的 "IlcIntervalSequenceVar实例是固定的,则该成员函数返回 "IlcTrue。 如果序列中的所有区间变量都存在并排序,或不存在,则区间序列变量是固定的。 否则,返回 "IlcFalse


isIn

publicIlcBool isIn(constIlcIntervalVar var) const

This member function returns IlcTrue if the argument var is a member of the invoking instance of IlcIntervalSequenceVar. 否则,返回 "IlcFalse


isInHead

publicIlcBool isInHead(constIlcIntervalVar var) const

如果参数 "var(调用实例 "IlcIntervalSequenceVar的成员)位于序列的头部子序列中,则该成员函数返回 "IlcTrue。 否则,返回 "IlcFalse

如果参数 "var为空句柄,则该成员函数返回 "IlcTrue


isInTail

publicIlcBool isInTail(constIlcIntervalVar var) const

如果参数 "var(调用实例 "IlcIntervalSequenceVar的成员)位于序列的尾部子序列中,则该成员函数返回 "IlcTrue。 否则,返回 "IlcFalse

如果参数 "var为空句柄,则该成员函数返回 "IlcTrue


isLast

publicIlcBool isLast(constIlcIntervalVar a) const

如果区间变量 "a在调用序列中最后排序,则该成员函数返回 "IlcTrue


isPresent

publicIlcBool isPresent(constIlcIntervalVar var) const

如果参数 "var(调用实例 "IlcIntervalSequenceVar的成员)出现在序列中,则该成员函数返回 "IlcTrue。 请注意,优化引擎已经或将要传播区间变量。 否则,返回 "IlcFalse

如果参数 "var为空句柄,则该成员函数返回 "IlcTrue


isPrevious

publicIlcBool isPrevious(constIlcIntervalVar prev, constIlcIntervalVar next) const

如果在调用序列中,区间变量 "prev的排序紧接在区间变量 "next之前,则该成员函数返回 "IlcTrue


isSequenced

publicIlcBool isSequenced(constIlcIntervalVar var) const

如果参数 "var(调用实例 "IlcIntervalSequenceVar的成员)在序列中排序,则该成员函数返回 "IlcTrue。 如果一个区间变量在子序列的头部或尾部,或者在序列中不存在,则该区间变量被序列化。 否则,返回 "IlcFalse

如果参数 "var为空句柄,则该成员函数返回 "IlcTrue


isSequenced

publicIlcBool isSequenced() const

如果调用的 "IlcIntervalSequenceVar实例被排序,则该成员函数返回 "IlcTrue。 如果序列中的所有区间变量都有序列或没有序列,则区间序列变量被序列化。 否则,返回 "IlcFalse


removeCandidateHead

public voidremoveCandidateHead(constIlcIntervalVar var) const

该成员函数设置参数 "var,使其不能在本地扩展调用实例 "IlcIntervalSequenceVar的头部子序列。 如果区间参数不属于调用序列的候选头区间,修饰符将被忽略。

如果调用序列中存在间隔参数和头部间隔中的最新参数,则该修饰符与 "IlcIntervalSequenceVar::extendHead修饰符相反。


removeCandidateTail

public voidremoveCandidateTail(constIlcIntervalVar var) const

该成员函数设置参数 "var,使其不能本地扩展调用实例 "IlcIntervalSequenceVar的尾部子序列。 如果区间参数不属于调用序列的候选尾区间,修饰符将被忽略。

如果调用序列中存在间隔参数和尾部间隔中的最新参数,则该修饰符与 "IlcIntervalSequenceVar::extendTail修饰符相反。


setAbsent

public voidsetAbsent(constIlcIntervalVar var) const

This member sets the interval variable argument var as absent in the invoking instance of IlcIntervalSequenceVar. 当间隔存在固定时,优化引擎会触发序列上的存在事件。 传播引擎执行事件后,将从调用序列的头部、尾部和未排序区间组中删除不存在的区间。

请注意,空句柄区间是一个有效参数,并且始终存在于调用序列中。 在这种情况下,以及对于已经存在的时间间隔,该成员函数会导致传播失败。


setBefore

public voidsetBefore(constIlcIntervalVar before, constIlcIntervalVar after) const

该成员函数将区间 "before设置为调用实例 "IlcIntervalSequenceVar中的区间 "after之前。 在解决方案中,如果两个区间都存在,则 "before排序在 "after之前。

该修饰符旨在告知头尾图调用序列中间隔之间的优先级。


setPresent

public voidsetPresent(constIlcIntervalVar var) const

This member sets the interval variable argument var as present in the invoking instance of IlcIntervalSequenceVar. 当间隔存在固定时,优化引擎会触发序列上的存在事件。

请注意,空句柄区间是一个有效参数,并且始终存在于调用序列中。 在这种情况下,以及对于已经存在的区间,该成员函数不会改变序列。


setPrevious

public voidsetPrevious(constIlcIntervalVar prev, constIlcIntervalVar next) const

该成员函数将区间 "prev设置为区间 "next的前一个。 解决方案

该修改器用于限制调用序列中的部分子序列。 它是在约束条件的过滤算法中连接头尾子序列的方法。


tryExtendHead

public 'IlcGoal'tryExtendHead(const 'IlcIntervalVar'变异, 'IlcAny'标签=0) const

该成员函数返回一个目标,即 "IlcGoal的一个实例,它是由整数参数 "label标记的选择点(IlcOr)。 选择点试图通过参数 "var("IlcIntervalVar的一个实例)扩展调用实例 "IlcIntervalSequenceVar的头部子序列。

序列不应被排序,间隔应是头部的候选(成员函数 "IlcIntervalSequenceVar::isCandidateHead)。 粗略地说,选择点的左分支调用以区间为参数的 "IlcIntervalSequenceVar::extendHead,右分支调用以区间为参数的 "IlcIntervalSequenceVar::removeCandidateHead

这一目标旨在按时间顺序建立间隔序列。 参数区间 "var以及已在头部的所有区间都应固定其存在状态。


tryExtendTail

public 'IlcGoal'tryExtendTail(const 'IlcIntervalVar'变异, 'IlcAny'标签=0) const

该成员函数返回一个目标,即 "IlcGoal的一个实例,它是由整数参数 "label标记的选择点(IlcOr)。 选择点试图通过参数 "var("IlcIntervalVar的一个实例)扩展调用实例 "IlcIntervalSequenceVar的尾部子序列。

序列不应被排序,区间应是尾部的候选(成员函数 "IlcIntervalSequenceVar::isCandidateTail)。 粗略地说,选择点的左分支调用以区间为参数的 "IlcIntervalSequenceVar::extendTail,右分支调用以区间为参数的 "IlcIntervalSequenceVar::removeCandidateTail

这一目标旨在按时间顺序建立间隔反向序列。 参数区间 "var以及尾部的所有区间都应固定其存在状态。


whenExtendHead

public voidwhenExtendHead(constIlcDemon d) const

该成员函数在调用的 "IlcIntervalSequenceVar实例上创建一个头部扩展事件。 它将参数 "d与序列头部子序列的扩展名关联起来。

由于约束也是恶魔,因此约束也可以作为参数传递给该成员函数。 只要调用序列有头部扩展,就会传播该约束。

该成员函数只能在张贴约束时使用。


whenExtendTail

public voidwhenExtendTail(constIlcDemon d) const

该成员函数在调用的 "IlcIntervalSequenceVar实例上创建尾部扩展事件。 它将参数 "d与序列尾部子序列的扩展关联起来。

由于约束也是恶魔,因此约束也可以作为参数传递给该成员函数。 只要调用序列有尾部扩展,就会传播该约束。

该成员函数只能在张贴约束时使用。


whenNotSequenced

public voidwhenNotSequenced(constIlcDemon d) const

该成员函数会在调用的 "IlcIntervalSequenceVar实例上创建一个未排序的事件。 它将参数 "d与序列的候选头部和候选尾部子集的变化联系起来。

在实践中,在使用存在、扩展头部和扩展尾部事件的传播恶魔更新了 "头部-尾部 "图之后,您可能仍有理由更改 "头部 "或 "尾部 "候选集。 适用于限制条件的规则是,如果候选首部(即 尾)区间变量肯定在另一个未排序的区间变量之后,那么它就不可能属于候选尾(res. 头)子集。

这种过滤算法一般是非序列区间数量的二次方(除非有更好的约束知识)。 这就是为什么与该事件相关的魔鬼与序列中的其他事件相比,触发优先级较低的原因。 未排序事件在到达调用序列传播的固定点后进行存在和头/尾扩展传播。


whenPresence

public voidwhenPresence(constIlcDemon d) const

该成员函数在调用的 "IlcIntervalSequenceVar实例上创建存在事件。 它将参数 "demon与序列中某个区间的存在变化联系起来。 通过调用调用序列上的成员函数 "getDeltaPresence(),可以得到其存在的固定区间,即该事件的 domain-delta。 如果该区间不存在,则尚未从序列子集中删除:例如,如果该区间存在,则仍保留在头部。 这样就可以利用传播算法中新出现的间隔初始化一个迭代器,即 "IlcIntervalSequenceVar::Iterator的实例。

由于约束也是恶魔,因此约束也可以作为参数传递给该成员函数。 只要调用序列有区间贡献固定,就会传播该约束。

该成员函数只能在张贴约束时使用。


内部枚举详细信息

枚举过滤器

定义文件: ilcp/cpext.h
筛选 "IlcIntervalSequenceVar实例的头尾图子集。

该枚举提供了一种机制,用于指明序列的 "IlcIntervalSequenceVar"实例、"IlcIntervalSequenceVar::Iterator"迭代器实例将遍历序列的哪个区间子集:头部、尾部、未排序、候选头部、候选尾部。

另请参阅:

字段

Head

用于遍历序列的头部子序列。

Tail

用于遍历序列的尾部子序列。

NotSequenced

用于遍历序列中的非序列区间,即既不在头部也不在尾部。

CandidateHead

用于遍历候选区间,以扩展序列的头部子序列。

CandidateTail

用于迭代候选区间,以扩展序列的尾部子序列。