文档性质: 核心开发文档 / AI 协作协议 / 架构演进指南 受众: 后续接手的 AI 协作伙伴 (需具备算法逻辑与运筹优化背景) 当前状态: V6.0 内核算法完备 (PoC),已实现“自动搜索与全局成本决策”,待进入 V2.0 跨城架构升级。
解决多约束条件下(多人、多天、多偏好)的旅行规划难题,将传统数天的人工规划缩短至秒级。
这是本引擎的“灵魂”,接手者必须维持其自动化决策的预期:
- 组合空间自动遍历: 系统需自动遍历“地点子集 (Location Subsets) × 航班选项 (Flight Options)”的笛卡尔积空间。
- 智能盈亏权衡 (Trade-off Analysis): 算法不只是寻找低价,而是计算“低价机票节省的钱”是否能覆盖“因延天天数产生的额外住宿、交通和包车费”。
- 方案可行性预审: 在搜索过程中,排期算法会即时校验航班时间窗(如“早上返回”是否会导致当天景点无法排下)。若排期冲突,该组合将被自动剔除。
我们已成功构建了一个功能强大的后端计算引擎,实现了以下核心模块:
- 配置驱动架构 (Configuration-Driven Architecture): 项目的核心逻辑与数据配置完全解耦,所有规划参数均可通过一个结构化的 Excel 文件进行管理。
- 多模式交通优化 (Multi-modal Transport Optimization): 实现了基于人数和行李约束的、最低成本的多车型(含租赁、网约车)组合分配算法。
- 地点子集剪枝 (Location Subset Pruning): 能够根据“必去/可选”标签,智能生成所有满足基本约束的候选地点组合。
- 性别感知住宿优化 (Gender-Aware Accommodation Optimization): 实现了基于动态规划的房间分配算法,确保团体同址、性别隔离,并能在不同住宿类型(酒店 vs. 别墅)间做出最优选择。
- 航班时间感知排期 (Flight Time-Aware Scheduling): 能够解析不同时段(上午/下午)的航班,并动态调整行程首末两日的有效游玩窗口,生成精确到分钟的每日路书。
- 全局成本决策引擎 (Global Cost Decision Engine): 能够综合评估所有“地点组合 x 航班选项”的可能性,并基于总成本(机票+住宿+交通+门票)做出最终的全局最优推荐。
项目目前处于 “核心功能完备的技术验证 (PoC) 向最小可行产品 (MVP) 过渡” 的阶段。我们拥有一个强大的、经过验证的后端计算核心,但尚未构建用户交互界面和外部数据接口。
- 语言: Python 3.10+
- 核心库:
Pandas(数据处理),Openpyxl(Excel I/O)。 - 算法模型: - 住宿分配: 动态规划 (DP) 求解性别组内最优组合。
- 路径优化: 全排列 (itertools) 解决 TSP 问题。
系统严格依赖 travel_data_v6.xlsx 中的 7 个 Sheet:
- 配置参数: 包含总人数、总行李、天数范围约束。
- 人员信息: 姓名与性别(住宿优化的输入)。
- 地点: 景点门票、建议耗时及必去标记。
- 交通矩阵: 地点间耗时,必须包含
Hotel锚点。 - 住宿方案: 定义 Hotel(分房型)或 Villa(整栋)供应商。
- 房型详情: 关联住宿方案的容量与单价。
- 机票价格: 包含天数、起降时间段及单价。
- 载入与校验: 通过
TravelPlannerEngine.from_excel一键初始化。 - 交通层 (
_optimize_transport): 求解 N 人与行李约束下的最低车型组合成本。 - 住宿层 (
_optimize_accommodation): 坚持“同址隔离”原则。分别计算男/女组的 DP 最优解,合并为该地点的住宿总价。 - 决策层 (
generate_itinerary): 执行自动搜索。对比所有可行方案的总成本(机票+住宿+交通+门票)。 - 排期层 (
_solve_tsp_and_schedule): 航班时间感知。根据具体起降时段(如“下午出发”)自动调整首尾两日的可用时长。
- 缺乏用户交互与调整: 当前引擎是一个“黑盒”,用户无法对生成的方案进行微调(例如:“我不喜欢这家酒店,换一个”、“把长城安排在第二天”)。
- 改进建议: 开发一个简约的前端界面(可使用 Streamlit 或 Flask 快速搭建 MVP),允许用户查看方案后,锁定或替换某些选项,然后触发引擎重新计算。
- 行程“节奏”单一: 调度算法会尽可能填满每日 09:00-21:00 的窗口,可能导致行程过于紧张。
- 改进建议: 在配置中增加“行程松紧度 (Pacing)”参数(如:轻松/标准/紧凑),算法可据此在活动间自动增加 1-2 小时的缓冲时间。
- 单点住宿假设: 当前模型假设整个行程中只入住一个住宿点。对于长途或多城市旅行,这显然不适用。
- 改进建议: 将行程按城市或区域进行分段,为每个分段独立调用住宿优化模块。这是一个重大的架构升级,应在 V2.0 中规划。
- 航班时间模型过于简化 (Oversimplified Flight Time Model): (新增) 当前系统使用‘上午/下午出发’等模糊时间段,并将其映射为固定的行程开始/结束时间(如 12:00)。这忽略了实际的飞行时长、机场与酒店间的交通耗时,以及提前到达机场办理登机手续的必要时间。
- 改进建议: 增强数据模型,允许输入具体的航班号或起降时间。排期算法
_solve_tsp_and_schedule需重构,以精确计算首日的“可用活动开始时间”(航班落地时间 + 出机场耗时 + 机场到酒店耗时)和末日的“最晚活动结束时间”(航班起飞时间 - 酒店到机场耗时 - 提前量)。这将使路书的精确度达到可直接执行的级别。
- 改进建议: 增强数据模型,允许输入具体的航班号或起降时间。排期算法
-
- 静态数据局限: 所有价格和耗时均来自静态 Excel,无法反映实时市场。
- PermissionError: 若 Excel 文件被外部占用,读取将失败。
- 初始化风险:
from_excel必须显式返回engine对象,否则实例将为None。
- 行程平摊: 引入日均活动量限制,将景点均匀摊分。
- 生理时间点插入: 自动预留午餐/晚餐/休息的 1.5 小时窗口。
- 可视化报表: 导出带图文和明细的精美路书 (HTML/PDF)。
- 支持用户交互 确定前端平台,开发一个前端界面
- AI 实时搜索接入: 设计适配器层,对接携程、高德 API 实现价格与路况的实时查询。
- 跨城架构重构: 支持多 Base、多城市流转。
- TSP 算法升级: 使用模拟退火或遗传算法替换全排列,支持 10 个以上地点。
- 全量代码块原则: 修改时仅输出受影响的方法,但严禁内部省略。
- 数据先行原则: 任何重构(如跨城功能)必须先从修改 Excel 模板和
create_excel_data.py开始。 - 计算准则: 内部始终以“总价”计算,严禁中间环节使用人均价以防误差累积。