| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
| 间隔序列变量 |
| 无重叠约束 |
| 同序和同共次序约束 |
| 获取下一个/上一个时间间隔类型的表达式 |
| 获取下一个/上一个区间界限的表达式 |
区间序列变量是在一组区间变量A 上定义的。 非正式地说,区间序列变量的值代表了A 的区间变量的总排序。 注意,排序时不考虑任何不存在的区间变量。
更正式地说,一组区间变量'A上的'区间序列变量''p代表一个决策变量,其可能的值是'A的所有区间的排列组合。 假设 "
是一组固定区间,n表示 "
的基数。 A permutation π of
is a function π : 
{
}
[1, n] such that if we denote length(π) = |{

, x(
)}| the number of present intervals:

请注意,序列本身并不对区间端点的相对位置施加任何限制。 例如,在序列 p 中,区间变量 a 可排在区间变量 b 之前,而不影响 a 和 b 的开始/结束点之间的相对位置(a 仍然可固定为在 b 结束之后开始)。 这是因为可以使用不同的语义来定义序列如何约束区间的位置。 我们稍后将了解 noOverlap 约束如何实现其中一个可能的语义。
以下是可对序列变量使用的约束:
表 3 列出了这些基本约束的形式语义。

序列变量还允许将固定整数类型与序列中的每个区间变量关联起来。 其中,"noOverlap约束(见下文)和 "下一个类型/上一页整数表达式(见下文)都使用了这些整数。 T(p, a)表示序列变量p 中区间变量a的固定整数类型。
涉及区间变量和区间序列变量的约束条件不能用于 CP 优化器的逻辑约束条件(参见操作符!)、 操作符||)。原因是任何涉及区间变量的逻辑约束都必须通过由presenceOf约束处理的区间上的存在布尔值来捕捉。 具有这种限制的约束条件是序列的排序约束条件(前、后、前、前)和noOverlap约束条件。
区间序列变量p上的noOverlap约束说明,序列定义了一个不重叠的区间链,且区间链中的任何区间都必须在区间链中下一个区间开始之前结束。 此约束通常可用于对分离式资源建模。
更正式地说,序列p的排列值 π 满足noOverlap约束的条件定义为

图 4 展示了序列变量和使用序列变量的无重叠约束条件。

如果指定了转换距离矩阵M,则它定义了序列中两个连续区间之间的最小距离。 该约束条件有两个版本:一个版本强制规定序列中每个区间与其下一个区间之间的转换距离(Next),另一个版本强制规定序列中每个区间与其所有后继区间之间的转换距离(After)。
更正式地说,如果T(p,a)表示序列变量p 中区间a的整数类型:

请注意,如果过渡矩阵M满足三角不等式,那么 "
和 "
两个版本的约束语义是相同的。 如果M不满足三角不等式,则约束条件 "
比 "
更强。
sameSequence和sameCommonSubsequence约束是对一对序列变量 "
和 "
的二元约束。 These constraints state that the relative position of some related subsets of interval variables is the same in both sequences: typically, if a is before b in sequence
then the interval related to a is before the interval related to b in sequence
. 以下是这些约束比较有用的用例的示例:
在两个序列变量 "
(定义在一组区间变量 "
上)和 "
(定义在一组区间变量 "
上)上定义了一个约束条件 "相同的通用子序列(
"),两个区间变量数组 "
和 "
"大小相同,且 "
. 该约束条件规定,"
和 "
定义的子序列只考虑当前区间对("
),与区间 "
和 "
之间的映射模完全相同。
例如,假设序列变量 "
定义在区间变量 "{a,b,c,d,e,f}上,序列变量 "
定义在区间变量 "{u,v,w,x,y,z}上,并带有约束条件 "相同的通用子序列" (
, '
, '[a,c,d,e,f],[u,w,v,x,y]) 。 假设在解题过程中,区间变量d和y不存在,而其他区间变量都存在。
"=(c,f,a,e,b)和 "
"=(w,v,u,x)这对排列组合满足sameCommonSubsequence"约束。 事实上,如果只考虑成对的存在区间,"
映射 "[a,c,e]"和 "[u,w,x]。
"在 "{a,c,e}"上的后序是 "(c,a,e)","
"在 "{u,w,x}"上的后序是 "(w,u,x),可以看出这两个后序的映射模数相同。
更具体地说,让n表示两个区间变量数组 "
和 "
"的大小。 排序变量 "
和 "
的排列组合 "
和 "
"满足约束条件 "相同的通用子序列"(
)的条件定义为

在两个大小相同的序列变量 "
(定义在一组区间变量 "
上)和 "
"(定义在一组区间变量 "
上)上定义了一个约束条件sameSequence(
),两个区间变量数组 "
和 "
"是集合 "
和 "
的排序。 该约束条件规定,序列 "
和 "
通过区间 "
和 "
之间的映射而完全相同。 sameSequence约束比sameCommonSubsequence约束更强;它还要求数组 "
和 "
包含其相对序列变量的所有定义区间,并且映射区间变量 "
和 "
的存在状态相同。
更正式一些,假设 n 表示两个序列变量的大小。 The condition for permutations
and
of the sequence variables
and
to satisfy constraint 相同序列(
) is defined as:

when parameters
and
are omitted in the definition of the above constraints, we assume
and
are the definition intervals of
and
, following the order of definition of interval variables in the sequence.
有两个整数表达式可用于获取下一个区间的类型(即 "下一个区间")。 前一个)到序列p 中的给定区间变量a。 当区间a不存在或为最后一个区间时(相应地,当区间 b 存在时)。 序列的第一个)区间,可以为这些整数表达式提供特定值。
更正式地说,设 π 是固定序列变量p 的置换值,"
是固定序列变量p 中固定区间变量a的值。
如果 "
存在,且不是 π 中的最后一个区间,我们将 "
表示 π 中紧邻 "
的唯一区间。

如果 "
存在,且不是 π 中的第一个区间,那么我们将 "
表示在 π 中 "
之前的唯一区间。

整数表达式 "startOfNext、"endOfNext、"lengthOfNext、"sizeOfNext"、"startOfPrev"、"endOfPrev"、"lengthOfPrev"和 "sizeOfPrev提供了对下一区间(即 "下一区间")不同属性的访问。 前一个)到序列p 中的给定区间变量a。 当区间a不存在或为最后一个区间时(相应地,当区间 b 存在时)。 序列的第一个)区间,可以为这些整数表达式提供特定值。
下表给出了这些表达式的语义。
