当前位置:首页>python>基于python机器学习实现ai规划上海轨交

基于python机器学习实现ai规划上海轨交

  • 2026-09-08 01:52:56
基于python机器学习实现ai规划上海轨交

本项目已开源至github,阅读原文访问项目

运行此程序需安装pip install numpy networkx scipy matplotlib geopandas

想法受贵道蕉通团队四月论坛讲座启发

本程序由两个文件组成config_data.py,design.py数据层与核心算法/渲染层,把上海抽象成一张布满节点和边的空间图,让若干条线路在图上不断试错学习,最终自己摸索出一套相对合理的骨干线网。
config_data.py 是城市现实的数字化底座。把上海划分成就业中心、大型居住社区、商业枢纽与教育医疗设施三大类共两百个地理点位,每个点位带有经纬度和权重,代表其在城市功能格局中的重要程度——张江科学之门、徐家汇ITC、大虹桥总部这类地标权重很高,对线路有更强"吸引力",郊区园区权重则较低。文件还定义了"中央活动区"(CAZ)概念,把人民广场、陆家嘴设为引力场中心,配置影响半径、到达奖励、最低穿越次数和未达标惩罚,迫使线路必须穿过市中心,而不是绕外围转圈。最后用一个合流函数,把这两百个增量点位与原有三百点底座拼成五百点的完整状态空间。
design.py 是项目核心。它先尝试加载道路和水域底图,缺失则自动退化为随机撒点模式,照常运行。建图环节用 cKDTree 取代两两遍历来寻找邻近节点连边,把 O(n²) 降到 O(n log n),并对崇明岛单独放宽连接半径,确保跨江桥接不断裂。
图构建完成后,程序从五百个点位中挑出锚点,用五乘四网格分区限制每格最多三个锚点,避免临港、张江等高密度片区垄断候选池。接着初始化五条线路任务,起终点按东西、南北或对角线方向成对挑选,强制分处市区两侧以保证穿越中心城区,同时检查线路间距与是否交叉,避免几条线挤在一起。
学习过程采用 Q-learning,每条线路是一个独立智能体、有自己的 Q 表,以 ε-贪婪策略选择下一步,ε 随训练逐渐衰减,由探索过渡到收敛。奖励函数是关键,综合了沿线长度代价、是否朝终点前进、是否穿越中央活动区、是否经过虹桥等枢纽、转弯是否过急、站距是否理想,以及线路重叠(惩罚)与共享换乘站(奖励)等因素;若线路始终未充分穿越市中心,还会触发较大扣分。
最后整个训练通过 matplotlib 动画逐帧可视化:每轮探索路径、更新 Q 表、统计换乘站并画出当前线网,标注各线路长度,迭代上千轮后趋于稳定。代码把训练参数封装进 TrainState 数据类,并将奖励计算、Q值更新和渲染三层逻辑解耦为独立的纯函数。

在调试过程中碰到了一些情况

"5条线中4条去临港"

因为临港权重较大且锚点较多,已在后续修复,不过这张图中居然做出了南枫线

"横平竖直"

为了防止线路不停在市区绕圈进行大角度转弯惩罚,初期为大于30度惩罚,已在后续修复为大于60度惩罚

鸣谢

Gemini

claude code

最新文章

随机文章