# 行程规划语义 v1

## 输入时间与班次

时刻表是调用者已经选择好的 **一个服务日** 的有限班次。时间是该服务日午夜起的整数秒，范围 0..259199（可表达 24:10:00 等跨午夜时刻）。不读取墙钟，不自行推断时区、夏令时或周历。GTFS 导入器显式选择日期；跨多个服务日的联合规划不在本版范围内。

每个班次包含有序停站，arrival <= departure，后一站 arrival >= 前一站 departure。支持经过同一站多次、超车、停站等待、禁止上客／下客、取消、单班次整体非负延误、可选严格无障碍约束。

同一班次从上车站到后续可下车站一次计算：不因中间经过多站增加上车次数，也不对车内停站加换乘缓冲。班次不代表贯通运行的车辆，换 trip_id 必须重新上车。

## 步行与换乘

步行链接显式有向，时间必须为正；允许步行链接连续连接，并计算累计步行预算。首段步行也消耗预算。路径是否无障碍由输入明确提供，不通过几何或名称推断。

第一次上车只需到站时间 <= 发车时间；之后每次上车要求到站时间 + **当前站点** min_change <= 发车时间。步行到另一站后仍应用该站 min_change；这是本站模型的保守定义，不声称支持 GTFS 所有 route/trip-specific transfer 规则。相等时可上车。

严格无障碍模式仅使用输入标为 accessible=true 的上下车站点、班次、步行链接；车内经过不可达站点但不下车可继续。未核实的 GTFS 无障碍值映射为 false，并记录导入说明。这是对给定数据的过滤，不是实际道路或车辆安全保证。

## 搜索与结果

在每个 `(stop,boardings)` 状态保留 arrival 与 walked 的非支配标签。更早到站且步行不多的标签可等待所有较晚标签能上的车，因此支配删除安全。上车次数作为状态分开存储，避免把更早但换乘更多的路径误当成唯一答案。

输出目的站上 `(arrival,boardings,walked)` 的全部非支配 **目标值组合**；每个相同组合保留一个确定性行程，不枚举所有等价路径。boardings=0 是纯步行；通常所说换乘次数为 max(0,boardings-1)。输出每段 walk/ride 的起止站、实际出发／到达、班次及停站索引，等待可由相邻段间隙核对。

查询范围：最多 8 次上车，步行预算 0..86400 秒，起点／终点可相同；目的地最晚到达可显式限定。首发时间允许等待，不保证“最晚离家”或 arrive-by 查询。无解表示在给定已验证时刻表、限制和数据中无路径；不外推为现实世界无路。

边界：最多 512 站、2048 班次、每班次 2..128 停站、全部停站合计 20000、4096 步行链接。搜索最多保留 100000 个历史标签、最多 2000000 次候选操作。达到任一预算返回明确错误，不将部分前沿标为完整。宿主应为不可信的大任务提供进程级隔离。

## 来源与独立性

算法使用已知的时刻表标签校正、资源约束最短路和 Pareto 支配思想。无新算法发明声明。与 AgentCanary 的策略回放、TideWeave 的事件窗口无业务代码或数据复用关系；也不修改或依赖其他本地参赛项目。不是静态步行图导航，也不是运营中心列车冲突调度。
