← 几何 · 平面里的那些「判定」 / 两个时间段之间,一共有几种「关系」? 待审核 6 / 8
concept · Allen's interval algebra

两个时间段之间,一共有几种「关系」?

一根数轴上摆两条线段 A 和 B(想成两件事各自的起止时刻)。它俩能有多少种相对位置?答案是恰好 13 种——这就是 1983 年 James F. Allen 提出的区间代数 (interval algebra)。在画布里拖动整条 A / B 移动,或拖动两端的小圆把手改变长度,下面会实时报出当前落在 13 种里的哪一种,并把右侧 13 关系图谱里对应的那格点亮。它的本质是个一维问题——关系完全由四个端点 AA+BB+A^- A^+ B^- B^+ 的相对大小决定。

端点会吸附到整数刻度,这样 相等 / 紧接 / 同时开始 这类「边界恰好对齐」的情形才能精确触发。点右侧网格里任意一格即可摆成那种关系;点 交换 A↔B 看关系如何变成它的转置 (converse)

1 · 13 种关系图谱 · 点一格即可摆成它

上排是 6 种「A 在前 / A 更大」的基本关系,下排是它们各自的转置(把 A、B 角色对调),正中间 equals 自己是自己的转置——6 对 + 1 个 = 13

2 · 为什么恰好是 13?——「6 对转置 + 1 个自反」

每种关系都有一个转置 (converse): 若 A before B,那么从 B 的视角看就是 B after A。把 13 种两两配对:beforeafterbefore\leftrightarrow aftermeetsmetbymeets\leftrightarrow met-byoverlapsoverlappedbyoverlaps\leftrightarrow overlapped-bystartsstartedbystarts\leftrightarrow started-byduringcontainsduring\leftrightarrow containsfinishesfinishedbyfinishes\leftrightarrow finished-by——6 对;而 equals 的转置还是它自己。6×2 + 1 = 13。在 demo 里点「交换 A↔B」,报出的关系总会跳到它的转置那一格。

关系 (relation) 简写 转置 (converse) 简写
before 先于 b after 后于 bi
meets 紧接 m met-by 被紧接 mi
overlaps 重叠 o overlapped-by 被重叠 oi
starts 开始于 s started-by 被开始 si
during 期间 d contains 包含 di
finishes 完成 f finished-by 被完成 fi
equals 等于 eq equals (自反) eq

3 · 它的内核是「点代数」:四个端点的相对次序

A、B 各有起点终点共四个端点 AA+BB+A^- A^+ B^- B^+(本身满足 A<A+A^-<A^+B<B+B^-<B^+)。只要确定 AA^-BB^-A+A^+B+B^+、以及跨端点 A+A^+BB^-AA^-B+B^+< / = / >,关系就唯一确定了——上面 demo 的读出条正是这四个比较。所以 Allen 代数等价于在四个端点上做点代数 (point algebra) 推理;classify 那段代码就是把这些比较串成一棵判定树,没有循环、没有几何,纯比较

一个常见的记号混淆:简写 dduring(A 在 B 内部), di 是它的转置 contains (d + inverse)。同理 bi / mi / oi / si / fi 都是在基本关系后缀 i 表示「inverse / 转置」。注意不要把 ddi 记反。

4 · 它用在哪里

定性时序推理 (qualitative temporal reasoning): 当我们只知道事件间的相对关系(「会议在午饭之后」、「通话期间在记笔记」),而没有精确时刻时,Allen 代数能把这些约束表达成一张图,再用组合表 (composition table) 做约束传播——已知 A before B、B before C,就能推出 A before C;多数情况下结果是若干关系的并集,通过路径一致性 (path-consistency) 收窄,这也是 AI 规划、日程排程、叙事时间线一致性检查的底层机器。NLP / 信息抽取里抽取事件时间线(如 TimeML / TimeBank 标注)直接用这 13 种关系;数据库 SQL:2011 的 PERIOD 与时态表的区间谓词、视频 / 多媒体同步 (SMIL)、项目管理甘特图里的先后依赖,本质都是这套区间关系。

它和本系列 sweep and prune同一枚硬币的两面: sweep 关心「两个区间是否重叠」(broad-phase 只要布尔), Allen 关心「以何种方式重叠」(13 选 1 的定性细分)。一维区间重叠检测 (AB+BA+A^- \le B^+ 且 B^- \le A^+) 正是 sweep 沿单轴投影做的事。

5 · 细节 / 边界情形

端点是开还是闭决定了「紧接 (meets)」的语义:本页按 A+===BA^+ === B^- 即判 meets——即把区间当成共享端点的闭区间,这是 Allen 原始定义(meets 表示「A 一结束 B 就开始,中间没有空隙」)。若按半开区间 [s, e) 实现,端点相等的判定与「是否算重叠」会和闭区间不同,工程里务必统一。零长度区间(时刻点) 不在经典 13 关系内(定义要求 A<A+A^- < A^+);本页把最小长度限制为 1 个刻度,回避退化。真要支持「区间 vs 时刻」需扩展到 point-interval 关系(另成一套,5 种)。

6 · 🔗 相关链接