2011年数模B题交巡警服务平台设置与调度优化系统
项目简介
本项目针对2011年全国大学生数学建模竞赛B题“交巡警服务平台的设置与调度”问题,提供了一套基于MATLAB的完整解决方案。项目采用全流程建模方式,涵盖了从城市路网数据模拟、全图最短路径计算、基于模拟退火算法的多目标选址优化、基于距离原则的管辖区划分,到利用蚁群算法规划警力巡逻路线的完整逻辑。系统最终通过可视化图表直观展示了平台布局、管辖区域归属及具体的巡逻轨迹。
功能特性
- 城市路网模拟:自动生成包含92个节点的随机交通网络,模拟路口坐标及节点重要度(权重),并根据距离阈值构建连通的加权无向图。
- 全图路径解算:利用Floyd-Warshall算法计算网络中任意两点间的最短路径矩阵,为后续调度提供距离基准。
- 智能选址优化:通过模拟退火算法(Simulated Annealing),在多维约束下寻找最优的6个交巡警平台位置,兼顾覆盖率与平均响应时间。
- 管辖区域自动划分:基于最近距离原则(类Voronoi图思想),将全城路口节点自动分配给最近的交巡警平台,形成明确的责任辖区。
- 巡逻路径规划:针对每个辖区内的节点,利用蚁群算法(ACO)求解闭环旅行商问题(TSP),规划出从平台出发并最终返回平台的最优巡逻路径。
- 结果可视化:生成两张专业图表,分别展示“路网结构与管辖划分”及“警力巡逻具体路线”。
系统要求
- 软件环境:MATLAB R2016a 及以上版本(代码不仅限于特定版本,但建议使用较新版本以获得更好的绘图支持)。
- 工具箱:标准安装即可,无需额外安装复杂的第三方工具箱,核心算法均为原生实现。
实现逻辑与详细功能
本项目中的主程序严格按照数学建模的逻辑步骤执行,具体实现细节如下:
1. 数据预处理与路网构建
系统首先通过随机种子(固定为2011)生成92个模拟路口节点,每个节点具有二维坐标和随机生成的路口重要度(权重1-10)。
- 邻接关系:程序计算节点间的欧氏距离,仅当距离小于设定的阈值(
ConnectThreshold = 25)时建立连接,形成稀疏路网。 - 连通性保障:内建检测机制,确保图中不存在孤立点。若发现孤立节点,会自动将其连接至最近的邻居节点,保证图的连通性。
2. 最短路径计算
核心函数采用
Floyd-Warshall算法。通过三重循环迭代,计算出路网中任意两个节点之间的最短路径长度(而非直线距离),生成距离矩阵
ShortestPath。这是后续计算响应时间(实际上是路网距离)的基础。
3. 为了解决问题一与问题二:平台设置与管辖划分
这一部分实现了多目标优化选址与区域划分的联合求解:
- 目标函数:定义了一个综合评价指标,旨在最大化“3分钟内(模拟距离15单位)能到达的节点权重之和”,同时对“全图平均响应距离”进行惩罚(即希望平均距离越小越好)。
- 求解算法:使用 模拟退火算法 (Simulated Annealing)。
*
初始化:随机选取6个节点作为初始平台位置。
*
迭代过程:在每次迭代中随机替换一个平台位置,计算新方案的综合目标值。
*
接受准则:依据Metropolis准则接受新解,允许以一定概率接受较差解以跳出局部最优。
- 辖区划分:确定最优平台位置后,程序遍历所有节点,将其归属到距离最近的平台(Voronoi图思想),从而完成全城管辖范围的硬划分。
4. 为了解决问题三:巡逻路线规划
针对划分好的6个辖区,系统分别进行路径规划:
- 问题转化:将每个辖区内的巡逻问题转化为单旅行商问题(TSP),要求从平台所在节点出发,遍历辖区内所有路口,最后回到平台。
- 求解算法:使用 蚁群算法 (Ant Colony Optimization, ACO)。
*
信息素与启发式因子:利用距离倒数作为启发因子,结合路径上的信息素浓度指导蚂蚁选择下一节点。
*
路径搜索:多只蚂蚁并行搜索构造路径,每轮迭代后更新信息素矩阵(全局更新)。
*
输出:为每个平台计算出一条总长度最短的闭环巡逻路线。
5. 结果可视化
程序最后调用可视化模块,通过两幅图展示结果:
- 管辖区域划分图:绘制灰色背景路网,节点颜色代表不同的管辖区,五角星标记代表选定的交巡警平台。
- 巡逻路线图:使用不同颜色的线条连接同辖区内的节点,展示具体的巡逻轨迹,并保留平台位置作为参考。
关键算法分析
模拟退火算法 (Simulated Annealing)
- 用于解决NP-Hard的选址问题(P-Median与覆盖模型的结合)。
- 代码中设定了初始温度
Temp = 1000,冷却率 CoolingRate = 0.95,并具备内层循环机制,确保在每个温度下进行充分的邻域搜索。
蚁群算法 (ACO)
*
alpha = 1:信息素重要程度。
*
beta = 3:启发式因子(距离可视度)重要程度,表明蚂蚁比较重视距离短的边。
*
rho = 0.5:信息素挥发速率,防止算法过早收敛。
*
Q = 100:信息素增强强度。
- 闭环处理:算法显式处理了回到起点的步骤,确保生成的路径是完整的回路。
使用方法
- 将代码保存为
main.m。 - 在MATLAB命令行窗口中直接输入
main 并回车,或在编辑器中点击运行。 - 程序将依次在命令行输出:
* 路网初始化状态
* Floyd算法计算进度
* 最优平台位置的节点编号
* 各辖区巡逻路径的周期长度
- 运行结束后,自动弹出两个可视化窗口展示建模结果。