2025电工杯数学建模竞赛B题 城市垃圾分类运输的路径优化与调度 保姆级教程讲解|模型讲解
完整内容请看文章最下面的推广群
2025电工杯数学建模竞赛 C题保姆级分析完整思路+代码+数据教学
2025全国大学生电工数学建模竞赛(电工杯)B题保姆级分析完整思路+代码+数据教学
2025电工杯 B题保姆级教程思路分析
DS数模-全国大学生电工数学建模(电工杯) B题保姆级教程思路分析
下面我将以背景介绍、数据集分析、问题分析的步骤来给大家讲解B题的具体思路。
1 背景介绍
该题聚焦于城市垃圾分类运输的路径优化与调度问题,涉及城市生活垃圾管理中的核心挑战:如何在垃圾分类、运输成本、碳排放、中转站选址等复杂约束下,设计高效且经济的运输方案。随着我国垃圾产量快速增长(2023年已达4亿吨),传统运输模式已难以满足需求,亟需通过数学模型优化路径规划与资源调度,以提升处理效率并降低环境负担。
这里需要注意几点:
2 数据集分析
题目给了这几个数据源,下面分别给出处理方法:
附件1:30个收集点坐标及总垃圾量
- 收集点编号:1~30(处理厂编号0,坐标为原点)
- x坐标(km):收集点的横坐标(相对于处理厂)
- y坐标(km):收集点的纵坐标
- 垃圾量(吨):每日总垃圾产生量
预处理步骤:
- 坐标转换:将坐标转换为距离矩阵(欧氏距离或实际路网距离)。
- 数据验证:检查垃圾量非负且合理。
- 归一化(可选):若不同量纲影响模型求解,需标准化。
Python代码如下:
import pandas as pd
# 模拟附件1前5行数据(实际需读取Excel)
data_attachment1 = {"收集点编号": [0, 1, 2, 3, 4],"x坐标(km)": [0, 12, 5, 20, 25],"y坐标(km)": [0, 8, 15, 30, 10],"垃圾量(吨)": ["-", 1.2, 2.3, 1.8, 3.1] # 处理厂垃圾量为占位符"-"
}
df1 = pd.DataFrame(data_attachment1)
df1["垃圾量(吨)"] = pd.to_numeric(df1["垃圾量(吨)"], errors="coerce") # 处理非数值
print("附件1前5行:\n", df1.head())
附件2:4类运输车辆参数
- 车辆类型k:1~4(对应4类垃圾)
- 垃圾类型:分类名称(如厨余垃圾)
- 载重(吨):车辆最大载重
- 容积(m³):车辆容积限制
- 距离成本(元/km):每公里运输成本
- 碳排放系数(kg/km):空载时单位距离碳排放
- 碳排放系数(kg/吨):载货时单位重量碳排放
预处理步骤:
- 参数映射:将车辆参数存储为字典或类对象,便于模型调用。
- 单位统一:确保载重、容积单位与问题描述一致。
代码如下:
# 模拟附件2数据(4类车辆)
data_attachment2 = {"车辆类型k": [1, 2, 3, 4],"垃圾类型": ["厨余垃圾", "可回收物", "有害垃圾", "其他垃圾"],"载重(吨)": [8, 6, 3, 10],"容积(m³)": [20, 25, 10, 18],"距离成本(元/km)": [2.5, 2, 5, 1.8],"碳排放系数(kg/km)": [0.8, 0.6, 1.2, 0.7],"碳排放系数(kg/吨)": [0.3, 0.2, 0.5, 0.25]
}
df2 = pd.DataFrame(data_attachment2)
print("\n附件2:\n", df2)
附件3:30个收集点的4类垃圾量分布
- 收集点编号:1~30
- 厨余垃圾、可回收物、有害垃圾、其他垃圾(吨):四类垃圾的具体产量
预处理步骤:
- 数据校验:确保每行四类垃圾总和等于附件1中的总垃圾量。
- 类型拆分:按车辆类型分类存储垃圾量数据。
代码如下:
# 模拟附件3前5行数据(四类垃圾量)
data_attachment3 = {"收集点编号": [1, 2, 3, 4, 5],"厨余垃圾": [0.72, 1.38, 1.08, 1.55, 1.62],"可回收物": [0.12, 0.23, 0.18, 0.31, 0.27],"有害垃圾": [0.06, 0.05, 0.04, 0.06, 0.05],"其他垃圾": [0.3, 0.64, 0.5, 1.18, 0.76]
}
df3 = pd.DataFrame(data_attachment3)
print("\n附件3前5行:\n", df3.head())
附件4:中转站候选位置及参数
- 中转站编号:31~35
- 建设成本(万元):固定投资成本
- 时间窗口(小时):允许停靠的时间段(如[6,18])
- 存储容量(吨):按类型1-4的容量限制(如[20,15,5,30])
预处理步骤:
- 解析时间窗口:拆分为start_time和end_time列。
- 解析存储容量:拆分为四列(类型1~4容量)。
- 数值转换:将列表字符串转换为数值列表。
预处理总结:
3 问题分析
问题一分析与求解:
建模思路:
建模过程:
算法推荐:
两阶段启发式算法
第一阶段:路径构造(TSP+分割)
- 生成全局TSP路径:使用遗传算法或LKH求解器生成访问所有30点的近似最优路径。
- 按Q分割行程:
- 沿TSP路径累加垃圾量,当累计量超过Q时截断,形成子路径,剩余点作为新起点。
- 重复直至所有点被分配。
第二阶段:车辆分配与时间约束处理
- 计算每段子路径的行驶时间:距离/40。
- 贪心分配车辆:
- 按子路径时间降序排列,依次分配车辆,确保每辆车总时间≤12小时。
- 若无法分配,增加车辆数。
改进遗传算法
编码设计:
- 染色体:排列30个收集点编号,表示访问顺序。
- 分割符:标记行程分割点,如基因段[1,5,9,...]表示子路径0→1→2→3→4→0,0→5→6→7→8→0等。
适应度函数:
Fitness=Total Distance+M⋅Penalty
超载或超时行程的惩罚系数M。
问题一需通过多行程VRP模型优化路径与车辆调度,结合启发式算法(如遗传算法)高效求解,同时需权衡模型简化与实际复杂性的差距。后续思路、代码等持续更新。
其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!