P1: phos
This commit is contained in:
188
task1/README.md
188
task1/README.md
@@ -34,16 +34,16 @@ flowchart TB
|
||||
B3 --> B5
|
||||
end
|
||||
|
||||
subgraph VALIDATE["结果验证 ⏳ 待完成"]
|
||||
subgraph VALIDATE["结果验证 ✅ 已完成"]
|
||||
V1[06_validate.py<br/>约束检验]
|
||||
V2[07_backtest.py<br/>历史回测]
|
||||
end
|
||||
|
||||
subgraph SENSITIVITY["敏感性分析 ⏳ 待完成"]
|
||||
subgraph SENSITIVITY["敏感性分析 ✅ 已完成"]
|
||||
S1[08_sensitivity.py<br/>参数扫描]
|
||||
end
|
||||
|
||||
subgraph VISUAL["可视化 ⏳ 待完成"]
|
||||
subgraph VISUAL["可视化 ✅ 已完成"]
|
||||
P1[09_visualize.py<br/>图表生成]
|
||||
end
|
||||
|
||||
@@ -72,9 +72,9 @@ flowchart TB
|
||||
TASK3 --> TASK4
|
||||
|
||||
style CORE fill:#90EE90
|
||||
style VALIDATE fill:#FFE4B5
|
||||
style SENSITIVITY fill:#FFE4B5
|
||||
style VISUAL fill:#FFE4B5
|
||||
style VALIDATE fill:#90EE90
|
||||
style SENSITIVITY fill:#90EE90
|
||||
style VISUAL fill:#90EE90
|
||||
```
|
||||
|
||||
### ASCII版本(详细)
|
||||
@@ -96,21 +96,21 @@ flowchart TB
|
||||
│ ┌─────────────┴────────────┬───────────┴───────────┐ │
|
||||
│ ▼ ▼ ▼ │
|
||||
│ ┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐ │
|
||||
│ │ 结果验证 [待完成 ⏳] │ │ 敏感性分析 [待完成 ⏳] │ │ 可视化 [待完成 ⏳] │ │
|
||||
│ │ 结果验证 [已完成 ✓] │ │ 敏感性分析 [已完成 ✓] │ │ 可视化 [已完成 ✓] │ │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ │ 06_validate.py │ │ 08_sensitivity.py │ │ 09_visualize.py │ │
|
||||
│ │ ┌──────────────────┐ │ │ ┌──────────────────┐ │ │ ┌──────────────────┐ │ │
|
||||
│ │ │• 约束满足检验 │ │ │ │• C ∈ {350,400,450}│ │ │ │• 站点地图(需求) │ │ │
|
||||
│ │ │ - Σk=730? │ │ │ │• p阈值扫描 │ │ │ │• k分布直方图 │ │ │
|
||||
│ │ │ - k≥1? │ │ │ │• C̄ ∈ {200,250,300}│ │ │ │• E-F权衡曲线 │ │ │
|
||||
│ │ │ - 每日2站点? │ │ │ │ │ │ │ │• 日历热力图 │ │ │
|
||||
│ │ └──────────────────┘ │ │ └──────────────────┘ │ │ │• 间隔分布箱线图 │ │ │
|
||||
│ │ │✓ 约束满足检验 │ │ │ │✓ C ∈ {350..450} │ │ │ │✓ 站点地图(需求) │ │ │
|
||||
│ │ │ - Σk=730 ✓ │ │ │ │✓ p阈值扫描 │ │ │ │✓ k分布直方图 │ │ │
|
||||
│ │ │ - k≥1 ✓ │ │ │ │✓ C̄ ∈ {200..300}│ │ │ │✓ E-F权衡曲线 │ │ │
|
||||
│ │ │ - 每日2站点 ✓ │ │ │ │ │ │ │ │✓ 日历热力图 │ │ │
|
||||
│ │ └──────────────────┘ │ │ └──────────────────┘ │ │ │✓ 间隔分布箱线图 │ │ │
|
||||
│ │ │ │ │ │ └──────────────────┘ │ │
|
||||
│ │ 07_backtest.py │ │ 输出: │ │ │ │
|
||||
│ │ ┌──────────────────┐ │ │ • 参数-指标表 │ │ 输出: │ │
|
||||
│ │ │• 2019数据回测 │ │ │ • Pareto前沿图 │ │ • figures/*.png │ │
|
||||
│ │ │• 预测vs实际对比 │ │ │ │ │ • 论文插图 │ │
|
||||
│ │ │• 残差分析 │ │ │ │ │ │ │
|
||||
│ │ 07_backtest.py │ │ 结论: │ │ │ │
|
||||
│ │ ┌──────────────────┐ │ │ E1变化 < 1.3% │ │ 输出: │ │
|
||||
│ │ │✓ 2019数据回测 │ │ │ 模型稳健 │ │ figures/*.png │ │
|
||||
│ │ │✓ 预测vs实际对比 │ │ │ │ │ (7张图) │ │
|
||||
│ │ │✓ 残差分析 │ │ │ │ │ │ │
|
||||
│ │ └──────────────────┘ │ │ │ │ │ │
|
||||
│ └──────────────────────┘ └──────────────────────┘ └──────────────────────┘ │
|
||||
│ │ │
|
||||
@@ -140,10 +140,10 @@ flowchart TB
|
||||
| 频次分配 | ✅ 完成 | `03_allocate.py` | Hamilton方法 |
|
||||
| 指标计算 | ✅ 完成 | `04_evaluate.py` | E1,E2,F1,F2 |
|
||||
| 日历排程 | ✅ 完成 | `05_schedule.py` | 贪心+局部优化 |
|
||||
| **约束验证** | ⏳ 待完成 | `06_validate.py` | 硬约束检验 |
|
||||
| **历史回测** | ⏳ 待完成 | `07_backtest.py` | 模型有效性 |
|
||||
| **敏感性分析** | ⏳ 待完成 | `08_sensitivity.py` | 参数稳健性 |
|
||||
| **可视化** | ⏳ 待完成 | `09_visualize.py` | 论文图表 |
|
||||
| 约束验证 | ✅ 完成 | `06_validate.py` | 6项硬约束全部通过 |
|
||||
| 历史回测 | ✅ 完成 | `07_backtest.py` | 模型有效性验证 |
|
||||
| 敏感性分析 | ✅ 完成 | `08_sensitivity.py` | 参数稳健性检验 |
|
||||
| 可视化 | ✅ 完成 | `09_visualize.py` | 7张论文图表 |
|
||||
|
||||
---
|
||||
|
||||
@@ -422,84 +422,119 @@ $$\Delta_i^* = \frac{365}{k_i}$$
|
||||
|
||||
---
|
||||
|
||||
## 6. 待完成:结果验证
|
||||
## 6. 结果验证 ✅
|
||||
|
||||
### 6.1 约束满足检验 (`06_validate.py`)
|
||||
|
||||
| 检验项 | 公式 | 预期结果 |
|
||||
|--------|------|---------|
|
||||
| 资源约束 | $\sum k_i = 730$ | 通过 |
|
||||
| 覆盖约束 | $\min k_i \geq 1$ | 通过 |
|
||||
| 日容量约束 | 每日恰好2站点 | 通过 |
|
||||
| 无重复约束 | 同一天不重复访问同一站点 | 通过 |
|
||||
| 检验项 | 公式 | 结果 |
|
||||
|--------|------|------|
|
||||
| C1: 资源约束 | $\sum k_i = 730$ | ✅ 通过 |
|
||||
| C2: 覆盖约束 | $\min k_i \geq 1$ | ✅ 通过 (min=2) |
|
||||
| C3: 日容量约束 | 每日恰好2站点 | ✅ 通过 |
|
||||
| C4: 无重复约束 | 同一天不重复访问同一站点 | ✅ 通过 |
|
||||
| C5: 排程一致性 | 排程次数 = k_i | ✅ 通过 |
|
||||
| C6: 总天数 | 日历天数 = 365 | ✅ 通过 |
|
||||
|
||||
**结论**:所有6项硬约束全部通过。
|
||||
|
||||
### 6.2 模型有效性验证 (`07_backtest.py`)
|
||||
|
||||
**方法**:留一交叉验证(Leave-One-Out)
|
||||
**关键发现**:
|
||||
|
||||
1. 用2019年的69个站点数据训练模型
|
||||
2. 预测第70个站点的 $\tilde{\mu}$ 和 $k$
|
||||
3. 与实际值对比
|
||||
4. 重复70次,计算平均误差
|
||||
| 指标 | 值 | 解读 |
|
||||
|------|-----|------|
|
||||
| corr(visits_2019, μ) | 0.0352 | 2019年访问次数与需求弱相关 |
|
||||
| corr(visits_2019, μ̃) | 0.0433 | 历史分配未充分考虑需求 |
|
||||
| CV(k/μ̃) | 0.0523 | k与μ̃高度成正比,模型内部一致 |
|
||||
| 服务量改进 | +35.24% | 相比2019缩放方案 |
|
||||
|
||||
**评估指标**:
|
||||
- MAPE(平均绝对百分比误差)
|
||||
- $R^2$(决定系数)
|
||||
**结论**:2019年历史分配与需求几乎不相关(r=0.035),说明历史分配未按需求进行。推荐方案实现按需分配,服务量提升35%。
|
||||
|
||||
---
|
||||
|
||||
## 7. 待完成:敏感性分析
|
||||
## 7. 敏感性分析 ✅
|
||||
|
||||
### 7.1 参数扫描 (`08_sensitivity.py`)
|
||||
|
||||
| 参数 | 基准值 | 扫描范围 | 影响 |
|
||||
|------|--------|---------|------|
|
||||
| 有效容量 $C$ | 400 | [350, 450] | 截断修正强度 |
|
||||
| 截断阈值 $p^{trunc}$ | 0.02 | [0.01, 0.10] | 修正站点数 |
|
||||
| 质量阈值 $\bar{C}$ | 250 | [200, 300] | E2计算 |
|
||||
| 有效容量 $C$ | 400 | [350, 375, 400, 425, 450] | 截断修正强度 |
|
||||
| 截断阈值 $p^{trunc}$ | 0.02 | [0.01, 0.02, 0.05, 0.10] | 修正站点数 |
|
||||
| 质量阈值 $\bar{C}$ | 250 | [200, 225, 250, 275, 300] | E2计算 |
|
||||
|
||||
### 7.2 敏感性报告格式
|
||||
### 7.2 敏感性分析结果
|
||||
|
||||
**C (有效容量) 敏感性**:
|
||||
```
|
||||
C = 350: 修正7站点, E1=141,234, F1=0.318
|
||||
C = 400: 修正5站点, E1=140,121, F1=0.314 ← 基准
|
||||
C = 450: 修正3站点, E1=139,456, F1=0.310
|
||||
C = 350: 修正9站点, E1=141,300, F1=0.3141
|
||||
C = 375: 修正7站点, E1=140,476, F1=0.3115
|
||||
C = 400: 修正5站点, E1=140,121, F1=0.3140 ← 基准
|
||||
C = 425: 修正3站点, E1=139,692, F1=0.3146
|
||||
C = 450: 修正2站点, E1=139,487, F1=0.3153
|
||||
```
|
||||
|
||||
**稳健性结论**:
|
||||
- C 变化 [350, 450] 时,E1 变化范围仅 1813 (1.29%)
|
||||
- p_thresh 变化 [0.01, 0.10] 时,E1 变化范围仅 80 (0.06%)
|
||||
- **模型对参数变化不敏感,结果稳健**
|
||||
|
||||
---
|
||||
|
||||
## 8. 待完成:可视化
|
||||
## 8. 可视化 ✅
|
||||
|
||||
### 8.1 图表清单 (`09_visualize.py`)
|
||||
|
||||
| 图编号 | 图名 | 类型 | 用途 |
|
||||
| 图编号 | 图名 | 文件 | 用途 |
|
||||
|--------|------|------|------|
|
||||
| Fig.1 | 站点地图 | 散点图+地图底图 | 展示站点分布和需求 |
|
||||
| Fig.2 | 需求修正对比 | 柱状图 | 展示修正前后μ变化 |
|
||||
| Fig.3 | 频次分配分布 | 直方图 | 展示k的分布 |
|
||||
| Fig.4 | 有效性-公平性权衡 | 散点图 | Pareto前沿 |
|
||||
| Fig.5 | 日历热力图 | 热力图 | 全年排程概览 |
|
||||
| Fig.6 | 访问间隔箱线图 | 箱线图 | 间隔分布 |
|
||||
| Fig.7 | 敏感性分析 | 折线图 | 参数影响 |
|
||||
| Fig.1 | 站点地图 | `fig1_site_map.png` | 站点分布、需求大小、访问频次 |
|
||||
| Fig.2 | 需求修正对比 | `fig2_demand_correction.png` | 5个修正站点μ→μ̃变化 |
|
||||
| Fig.3 | 频次分配分布 | `fig3_k_distribution.png` | k分布 + k与μ̃相关性 |
|
||||
| Fig.4 | 有效性-公平性权衡 | `fig4_efficiency_fairness.png` | 4种方案E-F对比 |
|
||||
| Fig.5 | 日历热力图 | `fig5_calendar_heatmap.png` | 全年排程可视化 |
|
||||
| Fig.6 | 访问间隔箱线图 | `fig6_gap_boxplot.png` | 间隔均匀性分析 |
|
||||
| Fig.7 | 敏感性分析 | `fig7_sensitivity.png` | C, p_thresh, c̄的影响 |
|
||||
|
||||
### 8.2 图表示例说明
|
||||
### 8.2 Fig.1: 站点地图
|
||||
|
||||
**Fig.1 站点地图**:
|
||||
- X轴:经度
|
||||
- Y轴:纬度
|
||||
- 点大小:$\mu_i$(需求)
|
||||
- 点颜色:$k_i$(访问频次)
|
||||
展示70个站点的地理分布,点大小表示需求μ,颜色表示访问频次k。
|
||||
|
||||
**Fig.4 有效性-公平性权衡**:
|
||||
- X轴:E2(质量加权服务量)
|
||||
- Y轴:F1(Gini系数,越小越公平)
|
||||
- 多个方案的散点
|
||||
- Pareto前沿曲线
|
||||

|
||||
|
||||
**Fig.5 日历热力图**:
|
||||
- X轴:月份(1-12)
|
||||
- Y轴:日期(1-31)
|
||||
- 颜色:该日访问的站点需求总和
|
||||
### 8.3 Fig.2: 需求修正对比
|
||||
|
||||
展示5个被截断修正的高需求站点,对比修正前μ和修正后μ̃。
|
||||
|
||||

|
||||
|
||||
### 8.4 Fig.3: 频次分配分布
|
||||
|
||||
左图:k的分布直方图;右图:k与μ̃的线性关系(r≈1,验证按比例分配)。
|
||||
|
||||

|
||||
|
||||
### 8.5 Fig.4: 有效性-公平性权衡
|
||||
|
||||
展示4种分配方案在E2-F1空间的位置,揭示效率与公平的Pareto权衡。
|
||||
|
||||

|
||||
|
||||
### 8.6 Fig.5: 日历热力图
|
||||
|
||||
全年365天排程可视化,颜色表示当日访问站点的需求总和。
|
||||
|
||||

|
||||
|
||||
### 8.7 Fig.6: 访问间隔分析
|
||||
|
||||
左图:不同频次组的间隔均值分布;右图:间隔CV分布(衡量均匀性)。
|
||||
|
||||

|
||||
|
||||
### 8.8 Fig.7: 敏感性分析
|
||||
|
||||
参数C、p_thresh、c̄对模型输出的影响,验证模型稳健性。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
@@ -514,29 +549,30 @@ task1/
|
||||
├── 03_allocate.py ✅ 频次分配
|
||||
├── 04_evaluate.py ✅ 指标计算
|
||||
├── 05_schedule.py ✅ 日历排程
|
||||
├── 06_validate.py ⏳ 约束验证
|
||||
├── 07_backtest.py ⏳ 历史回测
|
||||
├── 08_sensitivity.py ⏳ 敏感性分析
|
||||
├── 09_visualize.py ⏳ 可视化
|
||||
├── 06_validate.py ✅ 约束验证
|
||||
├── 07_backtest.py ✅ 历史回测
|
||||
├── 08_sensitivity.py ✅ 敏感性分析
|
||||
├── 09_visualize.py ✅ 可视化
|
||||
├── 01_clean.xlsx
|
||||
├── 02_demand.xlsx
|
||||
├── 03_allocate.xlsx
|
||||
├── 04_metrics.xlsx
|
||||
├── 05_schedule.xlsx
|
||||
└── figures/ ⏳ 图表输出目录
|
||||
├── 06_validate.xlsx
|
||||
├── 07_backtest.xlsx
|
||||
├── 08_sensitivity.xlsx
|
||||
└── figures/ ✅ 7张图表
|
||||
```
|
||||
|
||||
### 9.2 运行命令
|
||||
|
||||
```bash
|
||||
# 核心流程(已完成)
|
||||
# 完整流程(全部已完成)
|
||||
python task1/01_clean.py
|
||||
python task1/02_demand_correction.py
|
||||
python task1/03_allocate.py
|
||||
python task1/04_evaluate.py
|
||||
python task1/05_schedule.py
|
||||
|
||||
# 验证与分析(待完成)
|
||||
python task1/06_validate.py
|
||||
python task1/07_backtest.py
|
||||
python task1/08_sensitivity.py
|
||||
|
||||
Reference in New Issue
Block a user