2025电工杯数学建模竞赛B题 城市垃圾分类运输的路径优化与调度 保姆级教程讲解|模型讲解

发布于:2025-05-24 ⋅ 阅读:(28) ⋅ 点赞:(0)

完整内容请看文章最下面的推广群

2025电工杯数学建模竞赛 C题保姆级分析完整思路+代码+数据教学

2025全国大学生电工数学建模竞赛(电工杯)B题保姆级分析完整思路+代码+数据教学

2025电工杯 B题保姆级教程思路分析

DS数模-全国大学生电工数学建模(电工杯) B题保姆级教程思路分析

下面我将以背景介绍、数据集分析、问题分析的步骤来给大家讲解B题的具体思路。

1 背景介绍

该题聚焦于城市垃圾分类运输的路径优化与调度问题,涉及城市生活垃圾管理中的核心挑战:如何在垃圾分类、运输成本、碳排放、中转站选址等复杂约束下,设计高效且经济的运输方案。随着我国垃圾产量快速增长(2023年已达4亿吨),传统运输模式已难以满足需求,亟需通过数学模型优化路径规划与资源调度,以提升处理效率并降低环境负担。

这里需要注意几点:

2 数据集分析

题目给了这几个数据源,下面分别给出处理方法:

附件1:30个收集点坐标及总垃圾量

  • 收集点编号​:1~30(处理厂编号0,坐标为原点)
  • x坐标(km)​​:收集点的横坐标(相对于处理厂)
  • y坐标(km)​​:收集点的纵坐标
  • 垃圾量(吨)​​:每日总垃圾产生量

预处理步骤​:

  1. 坐标转换​:将坐标转换为距离矩阵(欧氏距离或实际路网距离)。
  2. 数据验证​:检查垃圾量非负且合理。
  3. 归一化​(可选):若不同量纲影响模型求解,需标准化。

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/吨)​​:载货时单位重量碳排放

预处理步骤​:

  1. 参数映射​:将车辆参数存储为字典或类对象,便于模型调用。
  2. 单位统一​:确保载重、容积单位与问题描述一致。

代码如下:

# 模拟附件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. 数据校验​:确保每行四类垃圾总和等于附件1中的总垃圾量。
  2. 类型拆分​:按车辆类型分类存储垃圾量数据。

代码如下:

# 模拟附件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])

预处理步骤​:

  1. 解析时间窗口​:拆分为start_time和end_time列。
  2. 解析存储容量​:拆分为四列(类型1~4容量)。
  3. 数值转换​:将列表字符串转换为数值列表。

预处理总结:

3 问题分析

问题一分析与求解:

建模思路​:

建模过程:

算法推荐:

两阶段启发式算法

第一阶段:路径构造(TSP+分割)​

  1. 生成全局TSP路径​:使用遗传算法或LKH求解器生成访问所有30点的近似最优路径。
  2. 按Q分割行程​:
  • 沿TSP路径累加垃圾量,当累计量超过Q时截断,形成子路径,剩余点作为新起点。
  • 重复直至所有点被分配。

第二阶段:车辆分配与时间约束处理

  1. 计算每段子路径的行驶时间​:距离/40。
  2. 贪心分配车辆​:
  • 按子路径时间降序排列,依次分配车辆,确保每辆车总时间≤12小时。
  • 若无法分配,增加车辆数。

改进遗传算法

编码设计​:

  • 染色体​:排列30个收集点编号,表示访问顺序。
  • 分割符​:标记行程分割点,如基因段[1,5,9,...]表示子路径0→1→2→3→4→0,0→5→6→7→8→0等。

适应度函数​:

Fitness=Total Distance+M⋅Penalty

超载或超时行程的惩罚系数M。

问题一需通过多行程VRP模型优化路径与车辆调度,结合启发式算法(如遗传算法)高效求解,同时需权衡模型简化与实际复杂性的差距。后续思路、代码等持续更新。

其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!


网站公告

今日签到

点亮在社区的每一天
去签到