本项目是一个基于高德地图API的机房巡检路径规划与可视化系统,主要用于在停电场景下为运维人员规划最优的机房巡检路线。系统采用多层次优先级策略,确保在机房备电耗尽前完成巡检任务,并最大化保障高等级机房的正常运行。
- 多层次优先级策略:采用严格的等级优先和时间优化相结合的路径选择算法
- 全路径遍历:生成并评估所有可能的巡检路径组合
- 停电风险评估:精确计算机房停电风险,优先保障机房正常运行
- 等待时间优化:在无法避免停电时,最小化机房停电等待时间
- 高德地图API集成:使用高德地图驾车路径规划API获取精确的行驶路线
- 动态路况考虑:实时获取路况信息,计算准确的行驶时间
- 限流控制:实现API请求限流,避免超出配额限制
- 分段时间计算:精确计算每段行程的时间和到达时间
- 交互式地图:基于Folium生成交互式HTML地图
- 路线可视化:显示完整的行驶路线,包括静态路线和动态蚂蚁线效果
- 机房标记:不同颜色标记正常机房和停电风险机房
- 详细信息:点击标记可查看机房详细信息和坐标
-
test.py - 主程序模块
- 路径规划算法
- 机房数据管理
- API调用控制
- 时间计算逻辑
- 优先级评估系统
-
paint.py - 地图可视化模块
- 地图生成和渲染
- 路线绘制
- 标记点添加
- Web服务器启动
我们的路径规划采用双层优先级策略,确保在复杂停电场景下做出最优决策:
# 机房等级分组
等级1机房 → 等级2机房 → 等级3机房
# 路径组合生成
for 等级1机房的所有排列:
for 等级2机房的所有排列:
for 等级3机房的所有排列:
生成完整路径(起点 → 等级1 → 等级2 → 等级3)def evaluate_route(route):
# 获取API路径规划结果
driving_result = get_driving_route(route)
# 计算各段行程时间和到达时间
segments = calculate_route_segments(driving_result)
# 停电风险评估
power_off_dcs = []
for dc in data_centers:
power_off_time = 停电开始时间 + dc.备电时长
if dc.到达时间 > power_off_time:
power_off_dcs.append(dc)
# 计算等待时间
waiting_time = sum(dc.到达时间 - power_off_time for dc in power_off_dcs)
# 计算优先级分数
priority_score = get_route_priority_score(route)
return {
"valid": len(power_off_dcs) == 0,
"waiting_time": waiting_time,
"priority_score": priority_score,
"total_duration": total_duration
}def find_optimal_route():
# 生成所有可能路径
all_routes = generate_routes()
# 评估并分类
valid_routes = [] # 无停电风险路径
invalid_routes = [] # 有停电风险路径
for route in all_routes:
result = evaluate_route(route)
if result["valid"]:
valid_routes.append(result)
else:
invalid_routes.append(result)
# 第一优先级:选择无停电路径中的最优方案
if valid_routes:
return min(valid_routes, key=lambda x: (
x["priority_score"], # 等级优先
x["total_duration"] # 时间最短
))
# 第二优先级:选择停电路径中的最优方案
if invalid_routes:
return min(invalid_routes, key=lambda x: (
x["priority_score"], # 等级优先
x["waiting_time"], # 等待时间最短
x["total_duration"] # 时间最短
))等待时间 = Σ(机房到达时间 - 机房停电时间)
# 只计算停电后到达的机房
# 用于衡量停电造成的实际影响时间优先级分数 = (等级1机房数量, 等级2机房数量, 等级3机房数量)
# 元组比较确保等级1机房绝对优先
# 在同等级下比较机房数量# 无停电路径排序
sort_key = (priority_score, total_duration)
# 停电路径排序
sort_key = (priority_score, waiting_time, total_duration)机房停电时间 = 停电开始时间 + 机房备电时长
机房到达时间 = 出发时间 + 累计行驶时间
if 机房到达时间 > 机房停电时间 and 机房到达时间 < 停电结束时间: 机房存在停电风险 等待时间 = 机房到达时间 - 机房停电时间
- 高德地图API密钥:需要在
test.py中配置有效的API密钥 - 请求限流:默认每秒最多3个请求,可根据API配额调整
data_centers = [
DataCenter("机房名称", 等级, "经度,纬度", 备电时长分钟),
# 示例:
DataCenter("机房A", 1, "108.113967,34.245818", 60),
DataCenter("机房B", 2, "108.097724,34.215308", 30),
DataCenter("机房C", 3, "108.097724,34.285308", 15),
]- 端口设置:默认使用8002端口启动Web服务器
- 地图样式:使用OpenStreetMap瓦片,可根据需要更换
pip install folium requests- 在
test.py中设置API密钥 - 配置机房信息(名称、等级、坐标、备电时长)
- 设置起点坐标和停电时间
python test.py- 程序会自动计算最优路径并输出详细信息
- 自动在浏览器中打开可视化地图
- 地图文件保存为
route_map.html
- 路径选择策略:显示采用的优先级策略(无停电保障/最小损失)
- 最优路径信息:起点→途径点→终点的完整路径
- 时间分析:总用时、各段行程详情、等待时间分析
- 风险评估:机房备电时间和到达时间对比
- 停电预警:详细的停电风险警告和影响分析
- 绿色标记:起点
- 红色标记:终点
- 紫色标记:正常机房
- 红色标记:停电风险机房
- 蓝色路线:静态行驶路线
- 红色动态线:蚂蚁线效果
- 遍历所有可能路径,确保找到全局最优解
- 避免局部最优陷阱
- 同时考虑等级优先级、停电风险、行驶时间
- 平衡多个优化目标
- 优先保障无停电方案
- 在必要时最小化停电影响
- 详细的评估过程和选择理由
- 便于运维人员理解和决策
- 动态权重调整:根据实际情况调整等级权重
- 多起点支持:支持多个起点的路径规划
- 实时路况集成:集成实时路况信息
- 路径历史管理:保存和分析历史路径记录
- 移动端适配:优化移动设备显示效果
- 智能告警系统:集成邮件或短信告警功能
- 缓存机制:缓存API请求结果
- 并发处理:支持多路径并发计算
- 算法优化:使用启发式算法减少计算量
- 内存优化:优化大规模路径计算的内存使用
- API配额:注意高德地图API的调用配额限制
- 网络依赖:需要稳定的网络连接获取地图数据
- 坐标格式:确保坐标格式正确(经度,纬度)
- 时间同步:确保系统时间准确,影响停电时间计算
- 计算复杂度:机房数量增加时,路径组合数呈指数增长
- 地图无法显示:检查网络连接和端口占用
- 路径规划失败:检查API密钥和坐标格式
- 标记点位置错误:确认坐标格式为"经度,纬度"
- 时间计算异常:检查系统时间和停电时间设置
- 路径计算超时:考虑减少机房数量或优化算法
- 查看控制台输出的错误信息
- 验证API密钥有效性
- 检查机房坐标的准确性
- 确认网络连接状态
- 监控API调用频率和配额使用情况
本项目仅供学习和研究使用,请遵守相关API服务条款。