- 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)
681 lines
21 KiB
Markdown
681 lines
21 KiB
Markdown
# T-ALNS-RRD 论文复现完整计划
|
||
|
||
## 0. 文档概要
|
||
|
||
**论文标题**: Optimizing urban last mile delivery efficiency through dynamic vehicle routing heuristics and traffic flow analysis
|
||
**作者**: Lu Liu, Tianxia Wang (Yibin Vocational and Technical College)
|
||
**发表**: 2025, Scientific Reports
|
||
**复现类型**: 基于合成数据的算法机制复现 (Methodological Reproduction)
|
||
|
||
---
|
||
|
||
## 1. 复现目标体系
|
||
|
||
### 1.1 核心目标
|
||
|
||
复现论文提出的 T-ALNS-RRD 框架的核心算法链:
|
||
|
||
```
|
||
Static-VRPTW → TA-VRPTW-Greedy → ALNS-Base → T-ALNS → T-ALNS-RRD
|
||
```
|
||
|
||
### 1.2 验证目标 (5 个量化趋势)
|
||
|
||
| # | 趋势 | 预期方向 |
|
||
|---|------|---------|
|
||
| 1 | 交通感知成本降低拥堵暴露 | TA-Greedy CES < Static CES |
|
||
| 2 | ALNS 相比贪婪算法进一步降低总成本 | ALNS TotalCost < TA-Greedy |
|
||
| 3 | Tabu memory 减少重复搜索,提高解稳定性 | T-ALNS σ < ALNS σ |
|
||
| 4 | RRD 实时调度减少突发事件下的延误 | T-ALNS-RRD Delay < T-ALNS Delay |
|
||
| 5 | 各模块叠加后整体表现优于静态规划 | T-ALNS-RRD 全指标最优 |
|
||
|
||
### 1.3 成功标准
|
||
|
||
1. 生成可重复的合成数据集
|
||
2. 运行至少 4 个算法版本 (Static, TA-Greedy, ALNS, T-ALNS)
|
||
3. 输出统一评价指标
|
||
4. 展示逐模块改进趋势
|
||
5. **优先级**: 先完成 Static → TA-Greedy → ALNS → T-ALNS 四个版本
|
||
6. RRD 作为增强实验,可用简化交通事故案例展示
|
||
|
||
---
|
||
|
||
## 2. 数据集设计 (与论文 Table 2 对齐)
|
||
|
||
### 2.1 基本规模参数
|
||
|
||
| 参数 | 值 | 来源 |
|
||
|------|-----|------|
|
||
| 客户数 n | 47 | 论文 §4.2 |
|
||
| 仓库 | 1 (node 0) | 论文 §4.2 |
|
||
| 车辆数 m | 4 | 论文 §4.2 |
|
||
| 车辆容量 Q | 120 kg | 论文 §4.2 |
|
||
| 服务时间 s_i | 4 min/customer | 论文 §4.2 |
|
||
| 时间窗口 | 3 类 (morning/afternoon/evening) | 论文 §4.2 |
|
||
| 运营时间 | 6:00-18:00 (12 hours) | 论文 §4.3 |
|
||
| 时间段 H | 12 (1h each) | 论文 §4.3 |
|
||
| 区域范围 | 8 km × 10 km | 论文 §4.1 |
|
||
| 路网规模 | 48 nodes, 2256 arcs | 论文 Table 2 |
|
||
|
||
### 2.2 客户数据生成
|
||
|
||
每个客户属性:
|
||
```
|
||
customer_id, x (km), y (km), demand (kg), service_time (min),
|
||
earliest_time, latest_time, priority
|
||
```
|
||
|
||
生成规则:
|
||
- `x ∈ [0, 8] km`, `y ∈ [0, 10] km`
|
||
- `demand ∈ [3, 12] kg` (均匀或带簇偏差)
|
||
- `service_time = 4 min`
|
||
- 时间窗口分 3 类:
|
||
- Morning: 9:00-12:00
|
||
- Afternoon: 13:00-16:00
|
||
- Evening: 17:00-20:00
|
||
|
||
**空间分布**: 生成 3 个客户簇 (住宅区/商业区/办公区),增加路径优化意义
|
||
|
||
### 2.3 路网与弧数据
|
||
|
||
**初版方案**: 完全图 (complete graph),每对节点一条弧
|
||
|
||
每条弧属性:
|
||
```
|
||
from_node, to_node, distance (欧氏), base_travel_time,
|
||
road_type (arterial/collector/residential)
|
||
```
|
||
|
||
道路速度:
|
||
| Road Type | Speed |
|
||
|-----------|-------|
|
||
| Arterial | 45 km/h |
|
||
| Collector | 30 km/h |
|
||
| Residential | 20 km/h |
|
||
|
||
升级方案 (Phase 2+): 使用 networkx 生成网格路网模拟真实道路
|
||
|
||
### 2.4 时间依赖交通矩阵 (3 个张量)
|
||
|
||
为每个 `(i, j, h)` 组合计算,其中 `h ∈ {0, 1, ..., 11}`:
|
||
|
||
```python
|
||
travel_time[i, j, h] # 行驶时间
|
||
congestion[i, j, h] # 拥堵权重 γ ∈ [0, 1]
|
||
uncertainty[i, j, h] # 可靠性不确定性 η
|
||
```
|
||
|
||
**交通拥堵乘子** (论文 §3.2):
|
||
|
||
| 时间段 | 时段 | 拥堵乘子 |
|
||
|--------|------|---------|
|
||
| 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 × traffic_multiplier_h × road_noise
|
||
```
|
||
|
||
拥堵权重 (论文 Eq.9):
|
||
```
|
||
ρ_ij(T_i) = θ × γ_ij^(h), if T_i ∈ τ_h
|
||
```
|
||
|
||
风险调整时间 (论文 Eq.10):
|
||
```
|
||
t'_ij^(h) = t_ij^(h) + β × η_ij^(h)
|
||
```
|
||
|
||
**需要满足 FIFO 一致性** (论文 Eq.11):
|
||
```
|
||
T_i^1 ≤ T_i^2 ⇒ T_i^1 + t_ij(T_i^1) ≤ T_i^2 + t_ij(T_i^2)
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 问题建模与目标函数
|
||
|
||
### 3.1 DVRPTW-TA 形式化 (论文 §3.1)
|
||
|
||
在完全图 G=(N, A) 上建模,N = {0, 1, ..., 47},A ⊆ N × N。
|
||
|
||
### 3.2 复合成本函数 (论文 Eq.1)
|
||
|
||
```
|
||
Cost = Σ_k Σ_(i,j) x_ijk [t_ij(T_i) + λ₂ρ_ij(T_i)] + λ₁ Σ_j δ_j
|
||
|
||
其中:
|
||
δ_j = max{0, S_j - l_j} - 迟到惩罚 (论文 Eq.2)
|
||
t_ij(T_i) - 时间依赖行驶时间
|
||
ρ_ij(T_i) - 拥堵惩罚
|
||
λ₁ - 迟到惩罚权重
|
||
λ₂ - 拥堵暴露权重
|
||
```
|
||
|
||
### 3.3 约束条件
|
||
|
||
1. **每个客户服务一次** (Eq.3): `Σ_k Σ_j x_ijk = 1, ∀i ∈ N\{0}`
|
||
2. **车辆容量** (Eq.4): `Σ_i d_i Σ_j x_ijk ≤ Q, ∀k`
|
||
3. **时间可行性** (Eq.5): `A_j ≥ T_i + t_ij(T_i), S_j ≥ max{A_j, e_j}`
|
||
4. **软时间窗** (Eq.6): `S_j ≤ l_j + ε_j, ε_j ≥ 0`
|
||
5. **子回路消除** (Eq.7): MTZ 约束
|
||
|
||
---
|
||
|
||
## 4. 算法实现详细设计
|
||
|
||
### 4.1 Baseline 1: Static-VRPTW
|
||
|
||
**特点**: 不考虑时间变化、不考虑拥堵惩罚
|
||
**方法**: Greedy insertion heuristic
|
||
**输入**: 固定 base_travel_time
|
||
**输出**: 车辆路径方案
|
||
|
||
```
|
||
Algorithm:
|
||
1. 所有车辆从 depot 出发
|
||
2. 对每个未分配客户,计算插入各车辆当前路径各位置的最小边际成本
|
||
3. 选择边际成本增量最小的 (customer, vehicle, position)
|
||
4. 满足容量和时间窗约束则插入
|
||
5. 重复直到所有客户分配完毕
|
||
```
|
||
|
||
### 4.2 Baseline 2: TA-VRPTW-Greedy
|
||
|
||
**特点**: 考虑 time-dependent travel time + congestion penalty,但不使用 ALNS
|
||
**方法**: 与 Static 相同框架,但使用 t_ij(T_i) 和 ρ_ij(T_i)
|
||
|
||
**与 Static 的关键差异**: 边际成本计算使用 time-dependent travel time
|
||
|
||
### 4.3 Baseline 3: ALNS-Base (论文 §3.3.1 + Algorithm 1)
|
||
|
||
**核心组件**:
|
||
|
||
```
|
||
Destroy Operators (论文 §3.3.1):
|
||
- Random Removal: 均匀随机移除 α×n 个客户
|
||
- Worst Removal: 移除造成最大延迟/拥堵成本的客户
|
||
- Relatedness Removal: 移除地理或时间特征相似的客户
|
||
移除数量: |C| = ⌊α × n⌋, α ∈ [0.1, 0.4] (论文 Eq.15)
|
||
|
||
Repair Operators:
|
||
- Greedy Insertion: 最小化边际成本 (论文 Eq.16-17)
|
||
- Regret-2 Insertion: 最小化最优和次优插入位置差距
|
||
- Time-Window-Aware Insertion: 最小化时间窗违规
|
||
|
||
Acceptance: Simulated Annealing (论文 Eq.20-21)
|
||
P_accept = 1 if f(S') < f(S)
|
||
= exp(-(f(S') - f(S)) / τ_t) otherwise
|
||
τ_{t+1} = γ × τ_t, γ ∈ (0, 1)
|
||
|
||
Adaptive Operator Weights (论文 Eq.18-19):
|
||
p_h(t) = ω_h(t) / Σ ω_j(t)
|
||
ω_h(t+1) = (1-ξ) ω_h(t) + ξ × θ_r
|
||
奖励等级:
|
||
σ₁: 找到全局最优解
|
||
σ₂: 改善当前解
|
||
σ₃: 被接受但未改善
|
||
σ₄: 被拒绝
|
||
|
||
终止条件:
|
||
max_iter = 1000 (论文 §4.8)
|
||
time_limit = 600s
|
||
stall: 连续 T_stall 代无改进
|
||
```
|
||
|
||
**插入成本计算** (论文 Eq.16-17):
|
||
```
|
||
Δf_ijk(T_j) = t_ji(T_j) + s_i + t_ik(T_j + t_ji + s_i) - t_jk(T_j)
|
||
+ λ₁ × δ_i(T_i) + λ₂ × ρ_ji(T_j)
|
||
|
||
ΔF_jik = Δf_jik^local + Σ_(u,v)∈Asuffix [t_uv(T') + λ₁δ_v + λ₂ρ_uv]
|
||
- Σ_(u,v)∈Asuffix_old [t_uv + λ₁δ_v + λ₂ρ_uv]
|
||
```
|
||
|
||
### 4.4 Baseline 4: T-ALNS (论文 §3.3.2 + Algorithm 2)
|
||
|
||
在 ALNS 基础上增加三层 Tabu Memory:
|
||
|
||
#### Move-Based Tabu (论文 Eq.22-23)
|
||
```
|
||
存储: (C_removed, h_d, h_r, t_iter) 元组
|
||
判定: 如果存在记录 (Ĉ, ĥ_d, ĥ_r, ť) 满足:
|
||
|C_removed ∩ Ĉ| ≥ μ × min(|C_removed|, |Ĉ|)
|
||
AND t_current - ť ≤ τ_move
|
||
则为 Tabu
|
||
|
||
自适应 tenure (论文 Eq.32):
|
||
τ_move(t+1) = min(τ_move+1, τ_max) if no improvement in τ_stall
|
||
= max(τ_move-1, τ_min) if improvement found
|
||
```
|
||
|
||
#### Solution-Based Tabu (论文 Eq.23-24)
|
||
```
|
||
哈希函数: H(S) = Σ_k Σ_i φ(v_ki, v_k(i+1)) mod P
|
||
存储: H(S') 作为环形缓冲区 (最大 1000 或 2^⌈log₂(n)⌉)
|
||
Tabu: 如果 H(S') ∈ T_sol 且在最近 τ_sol 代内记录
|
||
```
|
||
|
||
#### Frequency Memory (论文 Eq.24-26)
|
||
```
|
||
客户-车辆分配频率: F^cv_ik(t+1) = F^cv_ik(t) + 1_[i∈R_k(S)]
|
||
时间位置频率: F^tp_ij(t+1) = F^tp_ij(t) + Σ_k 1_[v_kj = i]
|
||
拥堵加权 (Eq.33):
|
||
F^cv_ik(t+1) = F^cv_ik(t) + 1_[i∈R_k] × (1 + Σ_j ρ_ji(T_j))
|
||
定期归一化 (Eq.32): F ← ⌊F/κ⌋ 每 ν 代
|
||
```
|
||
|
||
#### 多样化强度控制 (论文 Eq.26-28)
|
||
```
|
||
δ(t) = ω₁ × (t - t_last_best)/T_max
|
||
+ ω₂ × |T_move|/|T_move|_max
|
||
+ ω₃ × σ(F^cv)
|
||
|
||
if δ(t) > δ_max: 切换到多样化模式
|
||
p'_h(t) = η × p_h(t) + (1-η) × div_h(t)/Σ div_j(t)
|
||
```
|
||
|
||
#### 赦免准则 (论文 Eq.29-31)
|
||
1. **全局最优赦免**: f(S') < f(S*)
|
||
2. **低频赦免**: min F^cv_ik < β × F̄^cv (鼓励未用分配)
|
||
3. **交通适应赦免**: 拥堵成本显著降低
|
||
|
||
### 4.5 Proposed: T-ALNS-RRD (论文 §3.3.3 + Algorithm 3)
|
||
|
||
#### 事件检测与分类
|
||
```
|
||
事件类型 (论文 §3.3.3):
|
||
E1: 关键交通事故 (道路封闭/事故/严重拥堵)
|
||
E2: 紧急订单插入 (高优先级、紧时间窗)
|
||
E3: 容量违规 (需求波动超过车辆容量)
|
||
E4: 服务时间违规 (累计延迟威胁时间窗)
|
||
|
||
紧急度评分 (论文 Eq.35):
|
||
Ψ(e,t) = α_e × (t_deadline - t_current)/t_horizon
|
||
+ β_e × impact(e) + γ_e × cost_increase(e)
|
||
```
|
||
|
||
#### 候选动作空间
|
||
```
|
||
E1 - 局部改道: K_s=5 条 FIFO 一致的 k-shortest-time 绕行
|
||
预算 Δ_max=8 min
|
||
E1 - 客户重分配: 3km 范围内、≤10min ETA 差的车辆
|
||
每车 top-2 regret 位置
|
||
E2 - 紧急插入: top-r 插入位置 (Eq.16)
|
||
延迟变体: ≤30min 偏移,惩罚 λ₁δ_j
|
||
全部不可行则 subcontract
|
||
E3 - 负载重分配: 最小可行子集转移,最多 3 次
|
||
E4 - 加速/放宽: 局部 2-opt 重排
|
||
不可行则临时容差 ϵ_tolerance
|
||
最大动作数 |A_e| ≤ 20
|
||
```
|
||
|
||
#### Rollout 仿真 (论文 Eq.36-39)
|
||
```
|
||
价值函数 (Eq.36):
|
||
V^rollout(s,a,H) = E[ Σ_h Σ_k Σ_(i,j)∈A^h_k
|
||
[t_ij + λ₂ρ_ij] + λ₁ Σ_j δ_j(S^h_j) ]
|
||
|
||
交通演化 (Eq.38):
|
||
t^rollout_ij(T_i + s) = t^(r)_ij + s/Δt × (t^(r+1)_ij - t^(r)_ij)
|
||
|
||
Tabu 调整价值 (Eq.39):
|
||
V^adjusted = V^rollout - τ_penalty × 1_[Tabu(a)]
|
||
+ τ_bonus × Diversification(a)
|
||
|
||
复合决策分数 (Eq.40):
|
||
Σ(a,e,s) = ω₁ × V^adjusted + ω₂ × Stability(a,s) + ω₃ × Recovery(a,s)
|
||
|
||
稳定性 (Eq.41):
|
||
Stability(a,s) = Σ_k |R^a_k ∩ R^s_k| / |R^a_k ∪ R^s_k|
|
||
|
||
恢复性 (Eq.42):
|
||
Recovery(a,s) = -Σ_k Σ_i |OptimalPosition(i) - CurrentPosition(i,a)|
|
||
```
|
||
|
||
#### 自适应资源分配 (论文 Eq.43-44)
|
||
```
|
||
H_rollout = max(H_min, H_max - α_urgency × Ψ(e,t))
|
||
N_sim = max(N_min, ⌊(T_available - T_overhead) / T_sim⌋)
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 评价指标体系 (论文 §4.4)
|
||
|
||
### 5.1 主要指标
|
||
|
||
| 指标 | 定义 | 公式 |
|
||
|------|------|------|
|
||
| Total Cost | 综合运营成本 | Eq.1 |
|
||
| Travel Time Cost | 总行驶时间成本 | Σ t_ij(T_i) |
|
||
| Delay Penalty | 迟到惩罚 | λ₁ Σ δ_j |
|
||
| Congestion Cost | 拥堵成本 | Σ ρ_ij(T_i) |
|
||
| OTDR | 准时送达率 | N_ontime / (n-1) (Eq.45) |
|
||
| Average Delay | 平均迟到时间 | Σ δ_j / n_late |
|
||
| Max Delay | 最大迟到时间 | max δ_j |
|
||
| Late Customers | 迟到客户数 | count(S_j > l_j) |
|
||
| CES | 拥堵暴露分数 | Σ ρ_ij(T_i) (Eq.47) |
|
||
| Average Route Duration | 平均路线时长 | (1/m) Σ (T_k^end - T_k^start) (Eq.46) |
|
||
|
||
### 5.2 算法性能指标
|
||
|
||
| 指标 | 定义 |
|
||
|------|------|
|
||
| Computation Time | 算法运行时间 |
|
||
| Iterations to Best | 找到最优解的迭代次数 |
|
||
| Convergence Rate | 收敛速度 (improvements/iteration) |
|
||
| Solution Stability (σ) | 解的稳定性 (标准差) |
|
||
|
||
### 5.3 RRD 专属指标
|
||
|
||
| 指标 | 定义 |
|
||
|------|------|
|
||
| Event Response Rate | 事件响应成功率 |
|
||
| Avg Response Time | 平均响应时间 (ms) |
|
||
| Cost Reduction via RRD | RRD 带来的成本降低 |
|
||
| Adaptation Success Rate | 自适应成功率 |
|
||
|
||
---
|
||
|
||
## 6. 实验设计 (论文 §5)
|
||
|
||
### 6.1 实验一: 主对比实验 (对应论文 Table 5-7, Fig 8-10)
|
||
|
||
**算法**: Static / TA-Greedy / ALNS-Base / T-ALNS / T-ALNS-RRD
|
||
|
||
**配置**:
|
||
- 30 个随机种子 (论文 §5.1: seeds 1-30)
|
||
- max_iter = 1000
|
||
- time_limit = 600s (可缩短)
|
||
- 实验结果求均值 ± 标准差
|
||
|
||
**输出表格**:
|
||
```
|
||
Algorithm | TotalCost | TravelTime | DelayPenalty | Congestion | OTDR | CES | CompTime
|
||
```
|
||
|
||
### 6.2 实验二: 消融实验 (对应论文 Table 11, Fig 13)
|
||
|
||
**配置**:
|
||
```
|
||
Base ALNS
|
||
+ Move Tabu Only
|
||
+ Solution Tabu Only
|
||
+ Frequency Memory Only
|
||
Full T-ALNS
|
||
+ Traffic Events Only
|
||
+ Urgent Delivery Only
|
||
+ All RRD Events (Full T-ALNS-RRD)
|
||
```
|
||
|
||
### 6.3 实验三: 交通不确定性鲁棒性实验 (对应论文 Table 14, Fig 15)
|
||
|
||
**配置**:
|
||
```
|
||
σ ∈ {0.1, 0.2, 0.3, 0.5}
|
||
每组重复 30 次
|
||
```
|
||
|
||
**输出指标**: 各 σ 下的 TotalCost、OTDR、CES、Robustness Index
|
||
|
||
### 6.4 实验四: 参数敏感性实验 (对应论文 Table 3)
|
||
|
||
**维度**:
|
||
| 参数 | 取值 |
|
||
|------|------|
|
||
| 客户数 | 30, 40, 47, 60 |
|
||
| 车辆数 | 2, 3, 4, 5, 6 |
|
||
| 车辆容量 (kg) | 80, 100, 120, 140, 160 |
|
||
|
||
### 6.5 实验五: 实时事件响应实验 (对应论文 Table 8, Fig 11)
|
||
|
||
**事件类型** (最低实现 3 类):
|
||
```
|
||
1. Traffic incident: 某边 travel_time 临时 × 2-3
|
||
2. Urgent order: 中途新增一个客户
|
||
3. Time-window risk: 预测某客户即将迟到
|
||
```
|
||
|
||
**输出**: Event Type | Frequency | Success Rate | Cost Reduction | Response Time
|
||
|
||
### 6.6 收敛性分析 (对应论文 Table 9-10, Fig 12)
|
||
|
||
记录 epoch-level 的 cost 下降:
|
||
```
|
||
Epoch 5, 10, 15, ..., 50
|
||
绘制 ALNS-Base vs T-ALNS vs T-ALNS-RRD 收敛曲线
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 可视化要求 (论文 Fig 7-16)
|
||
|
||
| 图编号 | 内容 | 类型 |
|
||
|--------|------|------|
|
||
| Fig 1 | 路线图: 仓库、47 客户、4 条路径 | 空间散点 + 连线 |
|
||
| Fig 2 | 算法框架图: ALNS → Tabu → RRD | 流程图 |
|
||
| Fig 3 | 主实验: Total Cost / OTDR / CES 柱状图 | 分组柱状图 |
|
||
| Fig 4 | 收敛曲线: ALNS vs T-ALNS vs T-ALNS-RRD | 折线图 |
|
||
| Fig 5 | 消融实验: 各模块贡献瀑布图 | 柱状图 |
|
||
| Fig 6 | RRD 示例: 扰动前后路线变化对比 | 双面板空间图 |
|
||
|
||
---
|
||
|
||
## 8. 项目代码结构
|
||
|
||
```
|
||
t_alns_rrd_reproduction/
|
||
├── README.md
|
||
├── requirements.txt # numpy, pandas, matplotlib, networkx, pyyaml, tqdm
|
||
├── configs/
|
||
│ ├── default.yaml # 全局默认参数
|
||
│ ├── experiment_main.yaml # 主对比实验配置
|
||
│ ├── experiment_ablation.yaml # 消融实验配置
|
||
│ └── experiment_robustness.yaml
|
||
├── src/
|
||
│ ├── __init__.py
|
||
│ ├── data_generator.py # 合成数据集生成
|
||
│ ├── problem.py # DVRPTW-TA 问题定义、Solution 数据结构
|
||
│ ├── cost.py # 成本函数计算 (Eq.1, Eq.16-17)
|
||
│ ├── schedule.py # 调度评估 (时间传播)
|
||
│ ├── baselines/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── static_vrptw.py # Baseline 1: Static-VRPTW greedy
|
||
│ │ └── ta_greedy.py # Baseline 2: TA-VRPTW-Greedy
|
||
│ ├── alns/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── operators_destroy.py # Random/Worst/Relatedness Removal
|
||
│ │ ├── operators_repair.py # Greedy/Regret-2/Time-Window-Aware Insertion
|
||
│ │ ├── acceptance.py # Simulated Annealing
|
||
│ │ └── alns_base.py # ALNS-Base (Algorithm 1)
|
||
│ ├── tabu/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── move_tabu.py # Move-based Tabu list (Eq.22-23)
|
||
│ │ ├── solution_tabu.py # Solution hash memory (Eq.24)
|
||
│ │ ├── frequency_memory.py # Frequency matrices (Eq.25-26)
|
||
│ │ └── t_alns.py # T-ALNS (Algorithm 2)
|
||
│ ├── rrd/
|
||
│ │ ├── __init__.py
|
||
│ │ ├── event_generator.py # 事件检测与分类 (Eq.35)
|
||
│ │ ├── candidate_actions.py # 候选动作生成
|
||
│ │ ├── rollout.py # Rollout 仿真 (Eq.36-39)
|
||
│ │ ├── dispatch.py # 调度决策 (Eq.40-42)
|
||
│ │ └── t_alns_rrd.py # T-ALNS-RRD (Algorithm 3)
|
||
│ ├── experiments/
|
||
│ │ ├── run_main_comparison.py
|
||
│ │ ├── run_ablation.py
|
||
│ │ ├── run_robustness.py
|
||
│ │ ├── run_sensitivity.py
|
||
│ │ └── run_convergence.py
|
||
│ └── visualization/
|
||
│ ├── plot_routes.py # 路线地图
|
||
│ ├── plot_convergence.py # 收敛曲线
|
||
│ ├── plot_results.py # 实验结果柱状图
|
||
│ └── plot_rrd.py # RRD 前后对比图
|
||
├── data/
|
||
│ └── synthetic/ # 生成的合成数据
|
||
├── results/
|
||
│ ├── tables/
|
||
│ ├── figures/
|
||
│ └── logs/
|
||
└── tests/ # 可选: 关键逻辑单元测试
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 分阶段实施计划
|
||
|
||
### 阶段 1: 基础可运行 (预计 2-3 天)
|
||
|
||
**目标**: 数据生成 + 两个 baseline 可运行
|
||
|
||
```
|
||
实现内容:
|
||
1. data_generator.py # 生成客户、路网、交通矩阵
|
||
2. problem.py # Solution 数据结构、约束检查
|
||
3. cost.py # Eq.1 成本计算
|
||
4. schedule.py # 时间传播
|
||
5. static_vrptw.py # Static-VRPTW greedy
|
||
6. ta_greedy.py # TA-VRPTW-Greedy
|
||
|
||
验收标准:
|
||
- 能生成 47 客户、4 车、12 时段的完整数据集
|
||
- Static-VRPTW 和 TA-Greedy 能输出可行路径
|
||
- 能计算 Total Cost, OTDR, CES
|
||
- 两个算法的 CES 差异体现交通感知效果
|
||
```
|
||
|
||
### 阶段 2: 核心算法复现 (预计 3-4 天)
|
||
|
||
**目标**: ALNS + T-ALNS 可运行,产消融表、收敛图
|
||
|
||
```
|
||
实现内容:
|
||
1. operators_destroy.py # 3 种 destroy 算子
|
||
2. operators_repair.py # 3 种 repair 算子 (含 Eq.16-17)
|
||
3. acceptance.py # SA 接受准则 (Eq.20-21)
|
||
4. alns_base.py # ALNS 主循环 (Algorithm 1)
|
||
5. move_tabu.py # 移动 Tabu (Eq.22-23, 32)
|
||
6. solution_tabu.py # 解 Tabu (Eq.24)
|
||
7. frequency_memory.py # 频率记忆 (Eq.25-26, 33)
|
||
8. t_alns.py # T-ALNS (Algorithm 2)
|
||
|
||
验收标准:
|
||
- ALNS-Base 能运行 1000 代并输出最优解
|
||
- T-ALNS 相比 ALNS-Base 有改善 (Total Cost ↓, OTDR ↑)
|
||
- 不同 Tabu 模块可独立开关进行消融
|
||
- 收敛曲线显示 T-ALNS 更快收敛
|
||
```
|
||
|
||
### 阶段 3: 实时调度增强 (预计 2-3 天)
|
||
|
||
**目标**: T-ALNS-RRD 可运行,产事件响应表
|
||
|
||
```
|
||
实现内容:
|
||
1. event_generator.py # 4 种事件检测 (Eq.35)
|
||
2. candidate_actions.py # 候选动作枚举 (含验证)
|
||
3. rollout.py # Rollout 仿真 (Eq.36-39)
|
||
4. dispatch.py # 复合决策 (Eq.40-42)
|
||
5. t_alns_rrd.py # T-ALNS-RRD (Algorithm 3)
|
||
|
||
验收标准:
|
||
- 能模拟至少 Traffic Incident 和 Urgent Order
|
||
- Rollout 能在 120s 内返回调度决策
|
||
- 调度后 OTDR 相比不调度有所提升
|
||
- 路线变化可视化 (before/after 对比)
|
||
```
|
||
|
||
### 阶段 4: 实验与可视化 (预计 2 天)
|
||
|
||
**目标**: 跑完全部实验,产出论文风格图表
|
||
|
||
```
|
||
实现内容:
|
||
1. run_main_comparison.py
|
||
2. run_ablation.py
|
||
3. run_robustness.py
|
||
4. run_sensitivity.py
|
||
5. 6 张可视化图
|
||
|
||
验收标准:
|
||
- 5 个实验全部可执行
|
||
- 产出至少 5 张可放入 PPT 的图表
|
||
- 表格数据保存在 results/tables/
|
||
- 图保存在 results/figures/
|
||
```
|
||
|
||
---
|
||
|
||
## 10. 技术栈与依赖
|
||
|
||
```
|
||
Python 3.11
|
||
numpy - 矩阵运算、随机数
|
||
pandas - 数据管理、表格输出
|
||
matplotlib - 可视化
|
||
networkx - 路网建模 (Phase 2+ 可选)
|
||
pyyaml - 配置文件
|
||
tqdm - 进度条
|
||
```
|
||
|
||
---
|
||
|
||
## 11. 关键参数默认值 (论文参数)
|
||
|
||
| 参数 | 默认值 | 来源 |
|
||
|------|--------|------|
|
||
| λ₁ (lateness) | 1.0 | 论文 Eq.1 |
|
||
| λ₂ (congestion) | 1.0 | 论文 Eq.1 |
|
||
| θ (congestion scale) | 1.0 | 论文 Eq.9 |
|
||
| β (risk aversion) | 0.3 | 论文 Eq.10 |
|
||
| α (destroy ratio) | [0.1, 0.4] | 论文 Eq.15 |
|
||
| τ₀ (initial temp) | 0.05 × Z(S⁰) | Algorithm 1 |
|
||
| γ (cooling rate) | 0.99975 | Algorithm 1 |
|
||
| ξ (reaction factor) | 0.1 | 论文 Eq.19 |
|
||
| τ_move (move tenure) | 7 | 论文 Table 4 |
|
||
| τ_sol (solution tenure) | 15 | 论文 Table 4 |
|
||
| μ (overlap threshold) | 0.5 | 论文 Eq.23 |
|
||
| δ_max (diversification) | 0.7 | 论文 Eq.27 |
|
||
| H_rollout | 30-120 min | 论文 Eq.43 |
|
||
| N_sim | 2-50 | 论文 Eq.44 |
|
||
| ω₁, ω₂, ω₃ (composite) | 0.4, 0.3, 0.3 | 论文 Eq.40 |
|
||
|
||
---
|
||
|
||
## 12. 风险与应对
|
||
|
||
| 风险 | 应对 |
|
||
|------|------|
|
||
| 完全图计算量过大 (47² = 2209 arcs × 12h × 3 params) | 完全图可行,约 81000 条数据,numpy 可处理 |
|
||
| ALNS 收敛慢 | 放宽 stall 条件,适当增加 max_iter |
|
||
| T-ALNS Tabu 逻辑复杂 | 先实现 Move Tabu Only,验证效果再加其他 |
|
||
| RRD rollout 耗时 | 降低 H_rollout 到 30min,减少 N_sim 到 10 |
|
||
| 结果与论文差异大 | 这是合成数据复现,重点是趋势验证而非精确复刻 |
|
||
|
||
---
|
||
|
||
## 13. 复现声明模板
|
||
|
||
最终汇报时使用如下定位:
|
||
|
||
> 由于原文数据集需向作者合理请求,且目前尚未获得完整数据与代码,本项目采用与论文实验规模和数据结构相近的自定义合成数据集,复现其核心算法流程和对比实验框架。复现重点在于验证不同算法模块对总成本、准时率、拥堵暴露和实时扰动响应能力的相对影响,而非逐项复刻原文数值结果。本项目属于基于合成数据的算法机制复现 (methodological reproduction)。
|
||
|
||
---
|
||
|
||
## 14. 预估时间线
|
||
|
||
| 阶段 | 内容 | 预估时间 |
|
||
|------|------|---------|
|
||
| 阶段 1 | 数据集 + 2 个 baseline | 2-3 天 |
|
||
| 阶段 2 | ALNS + T-ALNS | 3-4 天 |
|
||
| 阶段 3 | RRD 实时调度 | 2-3 天 |
|
||
| 阶段 4 | 实验跑全 + 可视化 | 2 天 |
|
||
| **总计** | | **9-12 天** |
|