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

776 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
可以,而且**非常建议你这样做**。在作者暂时没有提供原始数据集的情况下,你完全可以做 **“基于自定义合成数据集的方法复现”**,并比较不同算法模块的效果。
但要注意表述:这不是“完全复现原文数值结果”,而是 **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 客户数据生成
每个客户包含:
```text
customer_id
x
y
demand
service_time
earliest_time
latest_time
priority
```
建议生成规则:
```text
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 个客户簇:
```text
住宅区簇
商业区簇
办公区簇
```
这样路线优化会更有意义。
---
### 3.3 路网与弧数据生成
如果不使用真实 OSM可以先用完全图简化
[
A = N \times N, i \neq j
]
每两个节点之间都有一条可行弧。
每条弧包含:
```text
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 时间依赖交通矩阵
论文中交通流数据被离散为多个时间区间,并为每条弧计算时间依赖行驶时间和拥堵权重。 复现中建议生成三个张量:
```text
travel_time[i, j, h]
congestion[i, j, h]
uncertainty[i, j, h]
```
其中:
```text
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
静态车辆路径问题。
特点:
```text
不考虑时间变化
不考虑拥堵惩罚
只使用固定 base_travel_time
使用 greedy insertion 生成路线
```
目标:
作为最基础对照组。
---
### 4.2 Baseline 2TA-VRPTW-Greedy
交通感知贪婪算法。
特点:
```text
考虑 time-dependent travel time
考虑 congestion penalty
但不使用 ALNS
```
目标:
验证“交通感知成本”本身能否带来改进。
---
### 4.3 Baseline 3ALNS-Base
复现论文的基础 ALNS。
核心组件:
```text
初始解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。
建议先实现三个版本:
```text
T-ALNS-Move:
只加入 move-based tabu
T-ALNS-Solution:
加入 solution hash memory
T-ALNS-Full:
加入 move tabu + solution tabu + frequency memory
```
最小实现:
```text
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 | 预测某客户即将迟到 |
候选动作:
```text
Action A: local reroute
Action B: customer reassignment
Action C: service postponement
```
Rollout 评估:
```text
对每个候选动作,模拟未来 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
]
其中:
```text
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. 实验设计
### 实验一:主对比实验
比较:
```text
Static-VRPTW
TA-VRPTW-Greedy
ALNS-Base
T-ALNS
T-ALNS-RRD
```
每个算法运行:
```text
30 个随机种子
max_iter = 1000
time_limit = 600 s可根据电脑性能缩短
```
输出表格:
```text
Algorithm | Total Cost | OTDR | CES | Computation Time
```
预期结果趋势:
```text
Static-VRPTW 成本最高、准时率最低
TA-VRPTW-Greedy 拥堵暴露下降
ALNS-Base 总成本进一步下降
T-ALNS 稳定性更好
T-ALNS-RRD 在动态扰动下表现最好
```
---
### 实验二:消融实验
目的:证明各模块确实有贡献。
配置:
```text
ALNS-Base
+ Move Tabu
+ Solution Tabu
+ Frequency Memory
Full T-ALNS
Full T-ALNS + RRD
```
输出:
```text
Total Cost
OTDR
CES
Convergence Time
```
---
### 实验三:交通不确定性鲁棒性实验
设置不同交通扰动强度:
```text
sigma = 0.1
sigma = 0.2
sigma = 0.3
sigma = 0.5
```
每组重复 30 次。
输出:
```text
Algorithm | Low | Medium | High | Extreme | Degradation Rate
```
预期结果:
```text
T-ALNS-RRD 随 sigma 增大退化最慢
Static-VRPTW 退化最快
```
原文也做了 varying traffic uncertainty levels 的鲁棒性测试。
---
### 实验四:参数敏感性实验
参考原文做三个维度:
| 参数 | 取值 |
| ---- | ---------------------- |
| 客户数 | 30, 40, 47, 60 |
| 车辆数 | 2, 3, 4, 5, 6 |
| 车辆容量 | 80, 100, 120, 140, 160 |
输出:
```text
不同参数下的 Total Cost、OTDR、CES、Computation Time
```
作用:
说明算法不是只在某个单一设置下有效。
---
### 实验五:实时事件响应实验
模拟事件:
```text
rush hour congestion
random accident
urgent order
road closure
combined stress
```
输出:
```text
Event Type | Frequency | Success Rate | Cost Reduction | Response Time
```
如果时间有限,可以只做三类:
```text
traffic incident
urgent order
time-window risk
```
---
## 7. 项目代码结构建议
建议让 opencode 按下面结构生成项目:
```text
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基础可运行
实现:
```text
data_generator
cost function
Static-VRPTW
TA-VRPTW-Greedy
```
输出:
```text
两种算法的 total cost、OTDR、CES
```
### 阶段 2核心算法复现
实现:
```text
ALNS-Base
T-ALNS
convergence plot
ablation table
```
这一步是最重要的。
### 阶段 3实时调度增强
实现:
```text
event_generator
candidate actions
simplified rollout
T-ALNS-RRD
```
输出:
```text
事件响应成功率
扰动前后成本变化
动态路线变化图
```
---
## 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
```text
请帮我构建一个 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% 这些数值,因为数据不同。
你的成功标准应该是:
```text
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 框架的算法设计逻辑。