Files
Enterprise/work_plan.md
huangfu 8ff9715fb7 Initial commit: T-ALNS-RRD paper reproduction project
- 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)
2026-06-02 21:11:00 +08:00

17 KiB
Raw Blame History

可以,而且非常建议你这样做。在作者暂时没有提供原始数据集的情况下,你完全可以做 “基于自定义合成数据集的方法复现”,并比较不同算法模块的效果。

但要注意表述:这不是“完全复现原文数值结果”,而是 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 ]

重点不是追求和论文完全一致的数值,而是验证以下趋势:

  1. 加入交通感知成本后,路径选择能减少拥堵暴露;
  2. ALNS 相比贪婪算法能进一步降低总成本;
  3. Tabu memory 能减少重复搜索,提高解的稳定性;
  4. RRD 实时调度能在突发事件下减少延误和服务失败;
  5. 各模块叠加后,整体表现应优于静态路径规划。

论文的核心方法本身就是将动态拥堵惩罚 ALNS、多层 Tabu memory 和 rollout 实时调度集成到统一框架中。


2. 复现类型说明

本复现属于:

基于合成数据的算法机制复现

不是:

基于原始作者数据的严格结果复现

建议你在汇报或报告中这样写:

由于原文数据集需向作者合理请求,且目前尚未获得完整数据与代码,本项目采用与论文实验规模和数据结构相近的自定义合成数据集,复现其核心算法流程和对比实验框架。复现重点在于验证不同算法模块对总成本、准时率、拥堵暴露和实时扰动响应能力的相对影响,而非逐项复刻原文数值结果。

这句话很重要,可以避免老师质疑“为什么你的结果和论文百分比不完全一样”。


3. 自定义数据集设计

3.1 基本规模

参考原文实验设置,建议设置:

项目 复现设置
客户数 47
仓库数 1
车辆数 4
车辆容量 120 kg
服务时间 每个客户 4 min
时间窗 上午、下午、傍晚三类
运营时间 6:0018:00
时间段数量 12 个,每段 1 小时
区域范围 8 km × 10 km 合成城市区域

原文实验也是 47 个客户、4 辆车,客户需求为 312 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:0012:00
  afternoon: 13:0016:00
  evening: 17:0020: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: 时间段编号011

交通拥堵可以用时间段乘子表示:

时间段 拥堵强度
6:007:00 1.0
7:009:00 1.6
9:0011:00 1.2
11:0013:00 1.0
13:0016:00 1.2
16:0018: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 1Static-VRPTW

静态车辆路径问题。

特点:

不考虑时间变化
不考虑拥堵惩罚
只使用固定 base_travel_time
使用 greedy insertion 生成路线

目标:

作为最基础对照组。


4.2 Baseline 2TA-VRPTW-Greedy

交通感知贪婪算法。

特点:

考虑 time-dependent travel time
考虑 congestion penalty
但不使用 ALNS

目标:

验证“交通感知成本”本身能否带来改进。


4.3 Baseline 3ALNS-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 4T-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 ProposedT-ALNS-RRD

在 T-ALNS 上加入简化版实时调度。

事件类型:

事件 复现方式
Traffic incident 某条边 travel_time 临时乘以 23
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 框架的算法设计逻辑。