- Paper: Optimizing urban last mile delivery efficiency (Liu & Wang, 2025) - 5 algorithms: Static-VRPTW, TA-Greedy, ALNS-Base, T-ALNS, T-ALNS-RRD - v1 baseline + v2 calibrated experiments with full results - Tabu memory ablation study with convergence analysis - Comprehensive final report (FINAL_REPORT.md)
17 KiB
可以,而且非常建议你这样做。在作者暂时没有提供原始数据集的情况下,你完全可以做 “基于自定义合成数据集的方法复现”,并比较不同算法模块的效果。
但要注意表述:这不是“完全复现原文数值结果”,而是 methodological reproduction / algorithmic reproduction,也就是复现论文的核心算法流程和实验对比逻辑。原文实验本身也是一个受控的合成城市配送场景,作者使用了 47 个客户、4 辆车、上海中心城区启发的路网和合成订单需求,并明确说这是 proof-of-concept validation,而不是直接代表真实运营部署。
下面给你一份可以直接作为项目开发依据的 复现方案文档初稿。
T-ALNS-RRD 论文复现方案文档
1. 复现目标
本项目目标是在无法获得原文完整数据集的情况下,构建一个与论文设定相近的自定义合成城市末端配送数据集,并复现论文提出的核心算法框架:
[ Static\text{-}VRPTW \rightarrow TA\text{-}VRPTW\text{-}Greedy \rightarrow ALNS \rightarrow T\text{-}ALNS \rightarrow T\text{-}ALNS\text{-}RRD ]
重点不是追求和论文完全一致的数值,而是验证以下趋势:
- 加入交通感知成本后,路径选择能减少拥堵暴露;
- ALNS 相比贪婪算法能进一步降低总成本;
- Tabu memory 能减少重复搜索,提高解的稳定性;
- RRD 实时调度能在突发事件下减少延误和服务失败;
- 各模块叠加后,整体表现应优于静态路径规划。
论文的核心方法本身就是将动态拥堵惩罚 ALNS、多层 Tabu memory 和 rollout 实时调度集成到统一框架中。
2. 复现类型说明
本复现属于:
基于合成数据的算法机制复现。
不是:
基于原始作者数据的严格结果复现。
建议你在汇报或报告中这样写:
由于原文数据集需向作者合理请求,且目前尚未获得完整数据与代码,本项目采用与论文实验规模和数据结构相近的自定义合成数据集,复现其核心算法流程和对比实验框架。复现重点在于验证不同算法模块对总成本、准时率、拥堵暴露和实时扰动响应能力的相对影响,而非逐项复刻原文数值结果。
这句话很重要,可以避免老师质疑“为什么你的结果和论文百分比不完全一样”。
3. 自定义数据集设计
3.1 基本规模
参考原文实验设置,建议设置:
| 项目 | 复现设置 |
|---|---|
| 客户数 | 47 |
| 仓库数 | 1 |
| 车辆数 | 4 |
| 车辆容量 | 120 kg |
| 服务时间 | 每个客户 4 min |
| 时间窗 | 上午、下午、傍晚三类 |
| 运营时间 | 6:00–18:00 |
| 时间段数量 | 12 个,每段 1 小时 |
| 区域范围 | 8 km × 10 km 合成城市区域 |
原文实验也是 47 个客户、4 辆车,客户需求为 3–12 kg,服务时间为 4 分钟,时间窗分为 morning、afternoon、evening 三个时段。
3.2 客户数据生成
每个客户包含:
customer_id
x
y
demand
service_time
earliest_time
latest_time
priority
建议生成规则:
x ∈ [0, 8] km
y ∈ [0, 10] km
demand ∈ [3, 12] kg
service_time = 4 min
time window:
morning: 9:00–12:00
afternoon: 13:00–16:00
evening: 17:00–20:00
为了更像城市订单,不建议完全均匀随机分布。可以生成 3 个客户簇:
住宅区簇
商业区簇
办公区簇
这样路线优化会更有意义。
3.3 路网与弧数据生成
如果不使用真实 OSM,可以先用完全图简化:
[ A = N \times N, i \neq j ]
每两个节点之间都有一条可行弧。
每条弧包含:
from_node
to_node
distance
base_travel_time
road_type
距离用欧氏距离:
[ d_{ij}=\sqrt{(x_i-x_j)^2+(y_i-y_j)^2} ]
基础行驶时间:
[ base_time_{ij}=\frac{distance_{ij}}{speed} ]
可设置三类道路:
| road_type | speed |
|---|---|
| arterial | 45 km/h |
| collector | 30 km/h |
| residential | 20 km/h |
课程复现阶段,完全图已经足够;后续想更高级,可以再用 networkx 生成网格路网。
3.4 时间依赖交通矩阵
论文中交通流数据被离散为多个时间区间,并为每条弧计算时间依赖行驶时间和拥堵权重。 复现中建议生成三个张量:
travel_time[i, j, h]
congestion[i, j, h]
uncertainty[i, j, h]
其中:
i, j: 节点编号
h: 时间段编号,0–11
交通拥堵可以用时间段乘子表示:
| 时间段 | 拥堵强度 |
|---|---|
| 6:00–7:00 | 1.0 |
| 7:00–9:00 | 1.6 |
| 9:00–11:00 | 1.2 |
| 11:00–13:00 | 1.0 |
| 13:00–16:00 | 1.2 |
| 16:00–18:00 | 1.7 |
行驶时间:
[ t_{ij}^{(h)} = base_time_{ij} \times traffic_multiplier_h \times road_noise ]
拥堵权重:
[ \gamma_{ij}^{(h)} \in [0,1] ]
可靠性不确定性:
[ \eta_{ij}^{(h)} = \sigma \cdot t_{ij}^{(h)} ]
风险调整时间:
[ t'{ij}^{(h)} = t{ij}^{(h)} + \beta \eta_{ij}^{(h)} ]
4. 需要复现的算法
4.1 Baseline 1:Static-VRPTW
静态车辆路径问题。
特点:
不考虑时间变化
不考虑拥堵惩罚
只使用固定 base_travel_time
使用 greedy insertion 生成路线
目标:
作为最基础对照组。
4.2 Baseline 2:TA-VRPTW-Greedy
交通感知贪婪算法。
特点:
考虑 time-dependent travel time
考虑 congestion penalty
但不使用 ALNS
目标:
验证“交通感知成本”本身能否带来改进。
4.3 Baseline 3:ALNS-Base
复现论文的基础 ALNS。
核心组件:
初始解:greedy insertion
destroy operators:
random removal
worst removal
relatedness removal
repair operators:
greedy insertion
regret-2 insertion
time-window-aware insertion
acceptance:
simulated annealing
operator selection:
adaptive weights
论文中 ALNS 通过 destroy-repair 循环生成候选解,并使用自适应算子权重和模拟退火接受准则。
4.4 Baseline 4:T-ALNS
在 ALNS 上加入 Tabu memory。
建议先实现三个版本:
T-ALNS-Move:
只加入 move-based tabu
T-ALNS-Solution:
加入 solution hash memory
T-ALNS-Full:
加入 move tabu + solution tabu + frequency memory
最小实现:
move-based tabu:
记录最近被移除客户集合和算子组合
solution-based tabu:
记录最近路线结构 hash
frequency memory:
记录 customer-vehicle 分配频率
目标:
验证 Tabu 是否能进一步降低成本、提高稳定性。
4.5 Proposed:T-ALNS-RRD
在 T-ALNS 上加入简化版实时调度。
事件类型:
| 事件 | 复现方式 |
|---|---|
| Traffic incident | 某条边 travel_time 临时乘以 2–3 |
| Urgent order | 中途新增一个客户 |
| Capacity violation | 某客户需求临时增加 |
| Time-window risk | 预测某客户即将迟到 |
候选动作:
Action A: local reroute
Action B: customer reassignment
Action C: service postponement
Rollout 评估:
对每个候选动作,模拟未来 60 min
计算 expected cost
加入 route stability penalty
选择 adjusted cost 最低的动作
论文中 RRD 的基本思想就是在突发事件下生成候选响应动作,并通过 bounded-horizon rollout simulation 选择响应方案。
5. 目标函数与指标
5.1 总成本函数
复现目标函数建议使用:
[ Cost = TravelTime + \lambda_1 LatePenalty + \lambda_2 CongestionPenalty + \lambda_3 StabilityPenalty ]
其中:
TravelTime: 总行驶时间
LatePenalty: 所有客户迟到时间之和
CongestionPenalty: 路径拥堵暴露之和
StabilityPenalty: 实时调度后路线变化程度
对于非 RRD 算法,(\lambda_3=0)。
5.2 主要评价指标
| 指标 | 含义 |
|---|---|
| Total Cost | 综合运营成本 |
| Travel Time Cost | 总行驶时间 |
| Delay Penalty | 迟到惩罚 |
| Congestion Cost | 拥堵成本 |
| OTDR | 准时送达率 |
| Average Delay | 平均迟到时间 |
| Max Delay | 最大迟到时间 |
| Late Customers | 迟到客户数 |
| CES | Congestion Exposure Score |
| Computation Time | 算法运行时间 |
| Iterations to Best | 找到最优解的迭代次数 |
| Event Success Rate | RRD 事件响应成功率 |
| Response Time | RRD 平均响应时间 |
原文也使用了 total cost、OTDR、CES、实时重调度响应、计算时间等指标进行评估。
6. 实验设计
实验一:主对比实验
比较:
Static-VRPTW
TA-VRPTW-Greedy
ALNS-Base
T-ALNS
T-ALNS-RRD
每个算法运行:
30 个随机种子
max_iter = 1000
time_limit = 600 s,可根据电脑性能缩短
输出表格:
Algorithm | Total Cost | OTDR | CES | Computation Time
预期结果趋势:
Static-VRPTW 成本最高、准时率最低
TA-VRPTW-Greedy 拥堵暴露下降
ALNS-Base 总成本进一步下降
T-ALNS 稳定性更好
T-ALNS-RRD 在动态扰动下表现最好
实验二:消融实验
目的:证明各模块确实有贡献。
配置:
ALNS-Base
+ Move Tabu
+ Solution Tabu
+ Frequency Memory
Full T-ALNS
Full T-ALNS + RRD
输出:
Total Cost
OTDR
CES
Convergence Time
实验三:交通不确定性鲁棒性实验
设置不同交通扰动强度:
sigma = 0.1
sigma = 0.2
sigma = 0.3
sigma = 0.5
每组重复 30 次。
输出:
Algorithm | Low | Medium | High | Extreme | Degradation Rate
预期结果:
T-ALNS-RRD 随 sigma 增大退化最慢
Static-VRPTW 退化最快
原文也做了 varying traffic uncertainty levels 的鲁棒性测试。
实验四:参数敏感性实验
参考原文做三个维度:
| 参数 | 取值 |
|---|---|
| 客户数 | 30, 40, 47, 60 |
| 车辆数 | 2, 3, 4, 5, 6 |
| 车辆容量 | 80, 100, 120, 140, 160 |
输出:
不同参数下的 Total Cost、OTDR、CES、Computation Time
作用:
说明算法不是只在某个单一设置下有效。
实验五:实时事件响应实验
模拟事件:
rush hour congestion
random accident
urgent order
road closure
combined stress
输出:
Event Type | Frequency | Success Rate | Cost Reduction | Response Time
如果时间有限,可以只做三类:
traffic incident
urgent order
time-window risk
7. 项目代码结构建议
建议让 opencode 按下面结构生成项目:
t_alns_rrd_reproduction/
│
├── README.md
├── requirements.txt
├── configs/
│ ├── default.yaml
│ ├── experiment_main.yaml
│ ├── experiment_ablation.yaml
│ └── experiment_robustness.yaml
│
├── data/
│ ├── synthetic/
│ │ ├── customers.csv
│ │ ├── depot.csv
│ │ ├── vehicles.csv
│ │ ├── arcs.csv
│ │ ├── travel_time.npy
│ │ ├── congestion.npy
│ │ └── uncertainty.npy
│
├── src/
│ ├── data_generator.py
│ ├── problem.py
│ ├── cost.py
│ ├── schedule.py
│ ├── baselines/
│ │ ├── static_vrptw.py
│ │ └── ta_greedy.py
│ ├── alns/
│ │ ├── operators_destroy.py
│ │ ├── operators_repair.py
│ │ ├── alns_base.py
│ │ └── acceptance.py
│ ├── tabu/
│ │ ├── move_tabu.py
│ │ ├── solution_tabu.py
│ │ └── frequency_memory.py
│ ├── rrd/
│ │ ├── event_generator.py
│ │ ├── candidate_actions.py
│ │ ├── rollout.py
│ │ └── dispatch.py
│ ├── experiments/
│ │ ├── run_main_comparison.py
│ │ ├── run_ablation.py
│ │ ├── run_robustness.py
│ │ └── run_sensitivity.py
│ └── visualization/
│ ├── plot_routes.py
│ ├── plot_convergence.py
│ └── plot_results.py
│
├── results/
│ ├── tables/
│ ├── figures/
│ └── logs/
│
└── report/
├── reproduction_notes.md
└── figures_for_ppt/
8. 最小可行复现版本
如果时间比较紧,不要一次性追求完整 T-ALNS-RRD。建议按三阶段推进。
阶段 1:基础可运行
实现:
data_generator
cost function
Static-VRPTW
TA-VRPTW-Greedy
输出:
两种算法的 total cost、OTDR、CES
阶段 2:核心算法复现
实现:
ALNS-Base
T-ALNS
convergence plot
ablation table
这一步是最重要的。
阶段 3:实时调度增强
实现:
event_generator
candidate actions
simplified rollout
T-ALNS-RRD
输出:
事件响应成功率
扰动前后成本变化
动态路线变化图
9. 建议绘制的图表
你最终汇报可以准备 6 张图:
| 图 | 内容 |
|---|---|
| Figure 1 | 合成城市配送场景:仓库、客户、路线 |
| Figure 2 | 算法框架图:ALNS → Tabu → RRD |
| Figure 3 | 主实验柱状图:Total Cost / OTDR / CES |
| Figure 4 | 收敛曲线:ALNS vs T-ALNS |
| Figure 5 | 消融实验图:不同模块贡献 |
| Figure 6 | RRD 示例图:突发拥堵前后路线变化 |
其中 Figure 2 和 Figure 6 最适合用在 PPT 中讲清楚论文贡献。
10. 给 opencode 的开发提示词
你可以直接把下面这段发给 opencode:
请帮我构建一个 Python 项目,用于复现论文 “Optimizing urban last mile delivery efficiency through dynamic vehicle routing heuristics and traffic flow analysis” 中的核心算法思想。由于原文数据集暂未获得,请使用合成数据集进行算法机制复现。
项目目标:
1. 构建 47 个客户、1 个仓库、4 辆车的城市末端配送合成数据集;
2. 每个客户包含坐标、需求量、服务时间、时间窗;
3. 构建时间依赖交通矩阵,包括 travel_time[i,j,h]、congestion[i,j,h]、uncertainty[i,j,h],其中 h=0,...,11;
4. 实现以下算法:
- Static-VRPTW greedy baseline
- Traffic-aware VRPTW greedy baseline
- ALNS-Base
- T-ALNS with move tabu, solution tabu, frequency memory
- Simplified T-ALNS-RRD with event generation and rollout dispatch
5. 实现统一成本函数:
total_cost = travel_time + lambda_delay * lateness + lambda_congestion * congestion + lambda_stability * route_change_penalty
6. 输出评价指标:
total cost, travel time, delay penalty, congestion cost, OTDR, average delay, max delay, late customers, CES, computation time, convergence curve, event response success rate
7. 实现实验脚本:
- main comparison experiment
- ablation experiment
- traffic uncertainty robustness experiment
- parameter sensitivity experiment
8. 生成可视化图:
- route map
- cost comparison bar chart
- OTDR comparison chart
- CES comparison chart
- convergence curves
- RRD event before/after route change plot
代码要求:
- 使用 Python 3.11
- 使用 numpy, pandas, matplotlib, networkx, pyyaml
- 项目结构清晰,模块化组织
- 所有随机过程必须支持 random_seed
- 每个算法类都提供 run() 方法
- 实验结果保存到 results/tables 和 results/figures
- README 中说明如何运行每个实验
11. 成功标准
你的复现项目不需要得到和论文完全相同的 24.3%、92.8%、54.4% 这些数值,因为数据不同。
你的成功标准应该是:
1. 能生成可重复的合成数据集;
2. 能运行至少 4 个算法版本;
3. 能输出统一评价指标;
4. 能展示从 Static → TA-Greedy → ALNS → T-ALNS → T-ALNS-RRD 的逐步改进趋势;
5. 能在报告中解释每个模块为什么带来性能变化;
6. 能说明该复现是基于自定义数据的算法机制复现。
最推荐的复现策略
我建议你先不要完整追求 RRD,而是优先完成:
[ Static \rightarrow TA\text{-}Greedy \rightarrow ALNS \rightarrow T\text{-}ALNS ]
这四个版本已经足够支撑课程汇报中的“算法复现”。RRD 可以作为增强实验,用一个简化交通事故案例展示即可。
最终汇报时,你可以这样定位你的工作:
本项目在原文数据集暂未公开的条件下,构建了与论文实验规模一致的合成城市末端配送场景,并复现了论文的核心算法链条。实验通过逐步引入交通感知成本、ALNS 搜索、Tabu 记忆机制和简化实时调度模块,对比不同算法配置在总成本、准时率和拥堵暴露上的表现,从而验证原文 T-ALNS-RRD 框架的算法设计逻辑。