Files
mcm-mfp/task3
2026-01-19 12:59:03 +08:00
..
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 11:57:19 +08:00
2026-01-19 12:59:03 +08:00
2026-01-19 12:59:03 +08:00
2026-01-19 12:59:03 +08:00

Task 3: 双站点同车访问的随机优化方案

摘要

本文针对"同一辆卡车在单次行程中访问两个站点"的调度优化问题,提出一套基于随机优化的完整解决方案。核心创新点:

  1. 问题本质识别:将第一站点分配决策建模为两阶段随机优化问题,正确处理"第二站点需求不确定"的核心难点
  2. 共生站点配对模型:综合考虑距离、容量、波动性三维约束,构建配对价值函数
  3. 解析最优分配策略:推导出闭式解 q^* = \frac{\sigma_j \mu_i + \sigma_i (Q - \mu_j)}{\sigma_i + \sigma_j}
  4. 风险可控的全局调度:在提升效率的同时,将服务缺口风险控制在可接受范围

实际运行结果

  • 总服务量提升 16.9%140,121 → 163,777
  • 质量加权服务量提升 5.3%131,673 → 138,699
  • 资源节省 19.5%142次双站点访问
  • 服务缺口风险 17.1%(可控范围)

完整流程图

Mermaid版本GitHub可渲染

flowchart TB
    subgraph INPUT["数据输入"]
        A[Task 1 结果<br/>70站点 + 730次分配<br/>task1/03_allocate.xlsx]
    end

    subgraph TASK3["TASK 3: 双站点同车优化"]
        direction TB

        subgraph CORE["核心流程 ✅ 已完成"]
            subgraph PAIRING["阶段1: 配对选择"]
                B1[01_distance.py<br/>距离矩阵计算]
                B2[02_pairing.py<br/>可行性筛选+贪心选择]
                B1 --> B2
            end

            subgraph ALLOCATION["阶段2: 分配优化"]
                C1[03_allocation.py<br/>最优分配q*计算]
            end

            subgraph SCHEDULING["阶段3: 全局调度"]
                D1[04_reschedule.py<br/>访问次数重分配]
                D2[05_calendar.py<br/>日历排程生成]
                D1 --> D2
            end

            subgraph EVALUATION["阶段4: 效果评估"]
                E1[06_evaluate.py<br/>E1',E2',F1',F2',R1,RS]
            end

            B2 --> C1 --> D1
            D2 --> E1
        end

        subgraph VALIDATE["结果验证 ✅ 已完成"]
            V1[约束满足检验<br/>每日2事件、总730次]
            V2[与Task 1对比<br/>指标改进验证]
            V3[分配合理性<br/>q*边界检查]
        end

        subgraph SENSITIVITY["敏感性分析 ✅ 已完成"]
            S1[07_sensitivity.py<br/>4参数扫描]
            S2[合并比例: 1/3,1/2,2/3]
            S3[距离阈值: 30-70mi]
            S4[容量上限: 400-500]
            S5[CV阈值: 0.3-0.6]
            S1 --> S2
            S1 --> S3
            S1 --> S4
            S1 --> S5
        end

        subgraph VISUAL["可视化 ⏳ 待实现"]
            P1[Fig.1 站点配对地图]
            P2[Fig.2 分配策略散点图]
            P3[Fig.3 敏感性曲线]
            P4[Fig.4 日历热力图]
            P5[Fig.5 风险分布图]
        end

        CORE --> VALIDATE
        CORE --> SENSITIVITY
        VALIDATE --> VISUAL
        SENSITIVITY --> VISUAL
    end

    subgraph OUTPUT["输出文件"]
        F1[01_distance.xlsx<br/>距离矩阵]
        F2[02_pairing.xlsx<br/>34对配对]
        F3[03_allocation.xlsx<br/>最优分配]
        F4[04_reschedule.xlsx<br/>访问次数]
        F5[05_calendar.xlsx<br/>365天排程]
        F6[06_evaluate.xlsx<br/>效果对比]
        F7[07_sensitivity.xlsx<br/>敏感性结果]
    end

    A --> B1
    E1 --> F1
    E1 --> F2
    E1 --> F3
    E1 --> F4
    E1 --> F5
    E1 --> F6
    S1 --> F7

    style CORE fill:#90EE90
    style VALIDATE fill:#90EE90
    style SENSITIVITY fill:#90EE90
    style VISUAL fill:#FFE4B5

ASCII版本详细

┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│                              TASK 3 完整流程                                                 │
├─────────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                             │
│  ┌─────────────────────────────────────────────────────────────────────────────────────┐   │
│  │                        核心流程 [已完成 ✓]                                            │   │
│  │                                                                                       │   │
│  │  task1/03_allocate.xlsx                                                              │   │
│  │          │                                                                            │   │
│  │          ▼                                                                            │   │
│  │  ┌──────────────────┐     ┌──────────────────┐     ┌──────────────────┐             │   │
│  │  │ 01_distance.py   │ ──▶ │ 02_pairing.py    │ ──▶ │ 03_allocation.py │             │   │
│  │  │ 距离矩阵70×70    │     │ 34对配对选择     │     │ 最优分配q*       │             │   │
│  │  └──────────────────┘     └──────────────────┘     └────────┬─────────┘             │   │
│  │                                                              │                        │   │
│  │                                                              ▼                        │   │
│  │  ┌──────────────────┐     ┌──────────────────┐     ┌──────────────────┐             │   │
│  │  │ 06_evaluate.py   │ ◀── │ 05_calendar.py   │ ◀── │ 04_reschedule.py │             │   │
│  │  │ 效果评估对比     │     │ 365天日历排程    │     │ 访问次数重分配   │             │   │
│  │  └──────────────────┘     └──────────────────┘     └──────────────────┘             │   │
│  └─────────────────────────────────────────────────────────────────────────────────────┘   │
│                          │                                                                  │
│            ┌─────────────┼─────────────┬───────────────────────────┐                       │
│            │             │             │                           │                       │
│            ▼             ▼             ▼                           ▼                       │
│  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐   │
│  │ 结果验证 [✓]     │  │ 敏感性分析 [✓]  │  │ 可视化 [待实现]  │  │ 输出文件         │   │
│  │                  │  │                  │  │                  │  │                  │   │
│  │ ✓ 每日2事件     │  │ 07_sensitivity   │  │ □ 配对地图      │  │ 01_distance.xlsx │   │
│  │ ✓ 总730次访问   │  │ ┌──────────────┐ │  │ □ 分配散点图    │  │ 02_pairing.xlsx  │   │
│  │ ✓ q*边界检查    │  │ │合并比例      │ │  │ □ 敏感性曲线    │  │ 03_allocation.xlsx│  │
│  │ ✓ Task 1对比    │  │ │ 1/3,1/2,2/3  │ │  │ □ 日历热力图    │  │ 04_reschedule.xlsx│  │
│  │                  │  │ ├──────────────┤ │  │ □ 风险分布图    │  │ 05_calendar.xlsx │   │
│  │ 结论:           │  │ │距离阈值      │ │  │                  │  │ 06_evaluate.xlsx │   │
│  │ E1↑16.9%        │  │ │ 30-70 mi     │ │  │ 图表清单:       │  │ 07_sensitivity.xlsx│  │
│  │ E2↑5.3%         │  │ ├──────────────┤ │  │ Fig.1-5         │  │                  │   │
│  │ RS=19.5%        │  │ │容量上限      │ │  │                  │  │                  │   │
│  │ R1=17.1%        │  │ │ 400-500      │ │  │                  │  │                  │   │
│  │                  │  │ ├──────────────┤ │  │                  │  │                  │   │
│  │                  │  │ │CV阈值       │ │  │                  │  │                  │   │
│  │                  │  │ │ 0.3-0.6     │ │  │                  │  │                  │   │
│  │                  │  │ └──────────────┘ │  │                  │  │                  │   │
│  └──────────────────┘  └──────────────────┘  └──────────────────┘  └──────────────────┘   │
│                                                                                             │
└─────────────────────────────────────────────────────────────────────────────────────────────┘

1. 问题本质与底层逻辑

1.1 题目核心要求

题目原文关键句:

"decide on the amount of food to dispense at the first site (since without pre-registration the demand at the next site is not known for sure)"

为什么这是核心难点?

传统的单站点访问:需求已知(或可估计),分配是确定性问题。

双站点访问的困境:

卡车出发时 ──▶ 到达站点i ──▶ 服务完成 ──▶ 前往站点j ──▶ 服务站点j
     │              │              │              │
     │         需求D_i实现        │         需求D_j实现
     │              │              │              │
     └── 决策点预留多少给i     └── 剩余Q-S_i给j

问题本质:这是一个两阶段随机优化问题Two-Stage Stochastic Optimization

  • 第一阶段决策:在出发前决定 $q$给站点i预留多少
  • 第二阶段决策:观测到 D_i 后,$S_i = \min(D_i, q)$,剩余 Q - S_i 给站点j

1.2 为什么采用双站点模式?

底层逻辑:资源效率优化

单站点模式 双站点模式
每天2次独立访问 每天可能1次双站点+1次单站点
730次/年 释放部分槽位
灵活但资源密集 效率更高但有风险

核心权衡

  • 收益:释放访问槽位 → 可服务更多需求
  • 成本:需求不确定性 → 可能导致某站点服务不足

2. 符号定义与参数估计

2.1 符号体系

符号 定义 来源/估计
\mu_i, \sigma_i 站点 i 的需求均值和标准差 2019年历史数据
\tilde{\mu}_i 截断修正后的真实需求 Task 1截断回归
D_i 站点 i 的随机需求 D_i \sim N(\mu_i, \sigma_i^2)
Q 卡车单次总服务能力 400户
q 第一站点预分配量 决策变量
l_{ij} 站点间距离 Haversine公式计算
k_i 站点 i 的年度访问次数 Task 1 Hamilton分配

2.2 关键参数推导

为什么 $Q = 400$

题面信息:

  • 卡车运力 = 15,000 lbs
  • 典型服务 = 200-250户

推导:

\text{每户食物量} = \frac{15000}{225} \approx 67 \text{ lbs}

但数据显示 $\mu_{max} = 396.6$,说明实际每户分配可能更少:

\text{实际每户} \approx \frac{15000}{400} = 37.5 \text{ lbs}

Q = 400 作为容量上限,与数据一致。


3. 共生站点配对模型

3.1 配对约束的底层逻辑

约束1同日可达性

为什么需要距离约束?

单日时间预算分析:

工作日时间 = 8小时
单站点服务 = 2小时 × 2 = 4小时
转场+准备 = 0.5 + 行驶时间
可用行驶时间 = 8 - 4 - 0.5 = 3.5小时

假设平均车速30 mph含路况

l_{max} = 3.5 \times 30 = 105 \text{ miles}

为什么取50英里而非105英里

  • 保守设计:留有余量应对交通延误
  • 敏感性分析显示50英里已覆盖足够多的配对

距离计算公式Haversine简化

l_{ij} = 69.0 \times \sqrt{(\Delta lat)^2 + \cos^2(lat_{avg})(\Delta lon)^2}
  • 69.0 = 1度纬度对应的英里数
  • \cos^2(lat_{avg}) = 经度修正因子(高纬度地区经度圈变小)

约束2容量可行性

为什么 $\mu_i + \mu_j \leq 450$

  • 卡车容量 Q = 400
  • 允许10%溢出($\delta = 50$):因为需求是随机的,平均值之和略超容量时,实际服务可能仍在容量内
\mu_i + \mu_j \leq Q + \delta = 450

约束3需求稳定性

为什么限制CV变异系数

变异系数 CV = \sigma / \mu 衡量需求的相对波动性。

高CV站点的问题

  • 需求高度不确定
  • 分配策略难以优化
  • 服务缺口风险高

经验阈值:$CV_{max} = 0.5$(即标准差不超过均值的一半)

3.2 配对价值函数的设计逻辑

为什么需要价值函数?

满足约束的配对可能有上千个实际1568对需要选择最优的子集。

价值函数设计

V_{ij} = \underbrace{\alpha \cdot \frac{\mu_i + \mu_j}{Q}}_{\text{容量利用率}} - \underbrace{\beta \cdot \frac{l_{ij}}{l_{max}}}_{\text{距离惩罚}} - \underbrace{\gamma \cdot \frac{\sigma_i^2 + \sigma_j^2}{(\mu_i + \mu_j)^2}}_{\text{风险惩罚}}

各项解释

逻辑 权重
容量利用率 需求和接近Q的配对更有价值 \alpha = 1.0
距离惩罚 距离远的配对效率低 \beta = 0.3
风险惩罚 波动大的配对风险高 \gamma = 0.5

为什么用贪心算法而非整数规划?

  • 贪心算法O(n²),实现简单,结果接近最优
  • 整数规划:精确但复杂度高,收益有限
  • 约束"每站点最多配对一次"使贪心算法非常有效

3.3 实际运行结果

配对筛选

  • 候选配对数1568对满足3个约束
  • 最终选择:34对覆盖68个站点97%
  • 未配对站点2个

Top 10 高价值配对

配对 站点i 站点j 距离 需求和 价值
1 Boys and Girls Club Redeemer Lutheran 0.4 mi 441 1.07
2 Rathbone Woodhull 5.8 mi 445 1.06
3 Bath Campbell 9.6 mi 448 1.05
4 Springview Apts Waverly 0.8 mi 424 1.05
5 Birnie Transport Lindley 10.1 mi 446 1.04

4. 第一站点分配的随机优化模型

4.1 问题形式化

为什么建模为随机优化?

确定性思维的错误:

"给站点i分配 $\mu_i$给站点j分配 $Q - \mu_i$"

问题:实际需求 D_i 可能大于或小于 $\mu_i$

  • 若 $D_i > \mu_i$站点i服务不足
  • 若 $D_i < \mu_i$多余食物浪费在站点i站点j也可能不足

正确的建模

决策变量:q = 为站点i预留的食物量

服务量:

S_i = \min(D_i, q), \quad S_j = \min(D_j, Q - S_i)

目标:最大化期望总服务量

\max_q \quad E[S_i + S_j]

4.2 解析解的推导过程

引理:截断正态期望

对于 $X \sim N(\mu, \sigma^2)$

E[\min(X, c)] = \mu \cdot \Phi(z) - \sigma \cdot \phi(z) + c \cdot (1 - \Phi(z))

其中 $z = \frac{c - \mu}{\sigma}$。

推导

E[\min(X, c)] = \int_{-\infty}^{c} x \cdot f(x) dx + c \cdot P(X > c)

第一项通过分部积分,第二项直接计算,得到上述公式。

最优条件推导

简化假设:D_i, D_j 独立,忽略 S_i 的随机性对 E[S_j] 的影响。

E[S_i] \approx g(q; \mu_i, \sigma_i) E[S_j] \approx g(Q - q; \mu_j, \sigma_j)

q 求导并令其为零:

\frac{\partial E[S_i]}{\partial q} = \frac{\partial E[S_j]}{\partial (-q)}

利用截断正态的导数性质:

\frac{\partial E[\min(X, c)]}{\partial c} = 1 - \Phi\left(\frac{c - \mu}{\sigma}\right)

得到:

1 - \Phi\left(\frac{q - \mu_i}{\sigma_i}\right) = 1 - \Phi\left(\frac{Q - q - \mu_j}{\sigma_j}\right) \Phi\left(\frac{q - \mu_i}{\sigma_i}\right) = \Phi\left(\frac{Q - q - \mu_j}{\sigma_j}\right)

\Phi 的单调性:

\frac{q - \mu_i}{\sigma_i} = \frac{Q - q - \mu_j}{\sigma_j}

解得:

\boxed{q^* = \frac{\sigma_j \mu_i + \sigma_i (Q - \mu_j)}{\sigma_i + \sigma_j}}

4.3 最优分配公式的物理解释

改写公式:

q^* = \frac{\sigma_j}{\sigma_i + \sigma_j} \cdot \mu_i + \frac{\sigma_i}{\sigma_i + \sigma_j} \cdot (Q - \mu_j)

解释

  • 当 $\sigma_j \gg \sigma_i$$q^* \to \mu_i$为站点i精确分配因为j波动大需要更多缓冲
  • 当 $\sigma_i \gg \sigma_j$$q^* \to Q - \mu_j$为站点j预留更多因为i波动大
  • 当 $\sigma_i = \sigma_j$$q^* = \frac{\mu_i + Q - \mu_j}{2}$(平均分配)

核心洞察:波动大的站点需要更多"缓冲"空间。

4.4 鲁棒性约束

为什么需要约束?

极端情况下,q^* 可能导致某站点获得很少的预留:

  • 若 $q^* < \mu_i - \sigma_i$站点i很可能服务不足
  • 若 $Q - q^* < \mu_j - \sigma_j$站点j很可能服务不足

约束设计

\mu_i - k\sigma_i \leq q \leq Q - \mu_j + k\sigma_j

取 $k = 1$约84%保护水平)。

实际效果34对配对中无一触及边界约束——说明最优解本身已经是鲁棒的。

4.5 实际分配结果

统计量
q^* 范围 [23.9, 315.6]
分配比例范围 [6.0%, 78.9%]
平均分配比例 50.6%
平均效率 94.2%

Top 5 配对的分配方案

配对 \mu_i \mu_j \sigma_i \sigma_j q^* 比例
Boys & Girls + Redeemer 210.8 230.6 28.9 93.5 195.9 49.0%
Rathbone + Woodhull 269.1 176.0 38.2 35.9 248.1 62.0%
Bath + Campbell 279.5 168.5 67.9 33.9 254.3 63.6%
Springview + Waverly 27.6 396.6 5.6 51.9 23.9 6.0%
Birnie + Lindley 213.4 232.9 27.8 56.9 189.4 47.3%

5. 全局调度优化

5.1 合并比例的设计逻辑

为什么不全部合并?

风险考虑:

  • 双站点访问有服务缺口风险
  • 保留部分单独访问作为"保险"

合并比例公式

k_{ij} = \lfloor \min(k_i, k_j) / 2 \rfloor

示例站点i有10次访问站点j有6次

  • 双站点访问次数:\lfloor \min(10, 6) / 2 \rfloor = 3
  • 站点i剩余单独访问10 - 3 = 7
  • 站点j剩余单独访问6 - 3 = 3

5.2 释放槽位的重分配

为什么双站点访问算1次事件

题目说"sending the same truck to visit two sites on some of the trips"——双站点是一次"行程"。

重分配逻辑

  1. 计算释放的槽位:\Delta N = \sum k_{ij} = 142
  2. 按需求比例分配给所有站点
  3. 使用Hamilton方法取整

5.3 实际运行结果

指标
配对数 34
双站点访问次数 142
释放槽位 142
最终单站点访问 588
最终总事件 730符合约束

6. 效果评估

6.1 指标定义与逻辑

E1':期望总服务量

E_1' = \sum_{\text{单站点}} k_i \cdot \mu_i + \sum_{\text{双站点}} k_{ij} \cdot E[S_i + S_j]

E2':质量加权服务量

为什么需要质量加权?

当服务户数超过250时每户分得的食物减少

q(\mu) = \min\left(1, \frac{250}{\mu}\right)

双站点的质量计算(总量法)

q_{ij} = \min\left(1, \frac{250}{\mu_i + \mu_j}\right)

为什么用总量而非分站点计算?

  • 双站点共享同一卡车的食物
  • 总负载决定每户分得的量
  • 更符合物理实际

满足率 $r_i$与Task 1定义一致

r_i = \frac{k_i \cdot \mu_i}{\tilde{\mu}_i}

对于参与配对的站点:

r_i = \frac{k_i^{single} \cdot \mu_i + k_{ij} \cdot E[S_i]}{\tilde{\mu}_i}

R1服务缺口风险

R_1 = P(S_i / D_i < 0.8 \text{ 或 } S_j / D_j < 0.8)

6.2 实际结果对比

指标 Task 1 Task 3 变化 变化%
E1 (总服务量) 140,121 163,777 +23,656 +16.9%
E2 (质量加权) 131,673 138,699 +7,026 +5.3%
F1 (Gini系数) 0.314 0.320 +0.006 +1.9%
F2 (最低满足率) 2.0 2.0 0 0%
R1 (缺口风险) 0 0.171 +0.171 新增
RS (资源节省) 0% 19.5% +19.5% 新增

核心发现

  1. 通过双站点模式释放19.5%的访问槽位
  2. 总服务量提升16.9%
  3. 公平性几乎不变Gini仅增加1.9%
  4. 代价是引入17.1%的服务缺口风险

7. 敏感性分析

7.1 分析参数

参数 符号 基准值 扫描范围
合并比例 r_{merge} 1/2 [1/3, 1/2, 2/3]
距离阈值 l_{max} 50 mi [30, 40, 50, 60, 70]
容量上限 \mu_{sum,max} 450 [400, 425, 450, 475, 500]
CV阈值 CV_{max} 0.5 [0.3, 0.4, 0.5, 0.6]

7.2 敏感性结果

1. 合并比例 — 最敏感参数

merge_ratio 双站点次数 E1 E2 F1 R1
1/3 (0.333) 93 155,724 136,556 0.3200 0.1708
1/2 (0.500) 142 163,777 138,699 0.3199 0.1708
2/3 (0.667) 196 171,574 140,891 0.3122 0.1708
  • E1变化幅度9.68% — 最敏感
  • 提高合并比例可显著增加服务量,但可能略微降低公平性(F1)。

2. 距离阈值 — 稳健

l_max 配对数 E1 E2 F1 R1
30 mi 33 162,180 137,436 0.3173 0.1757
40 mi 34 163,252 138,368 0.3201 0.1714
50 mi 34 163,777 138,699 0.3199 0.1708
60 mi 34 163,763 138,587 0.3200 0.1714
70 mi 34 163,588 138,484 0.3201 0.1714
  • E1变化幅度0.98% — 模型极其稳健
  • 50英里是平衡效率与计算复杂度的理想选择。

3. 容量上限 — 风险敏感

mu_sum_max E1 E2 F1 R1
400 162,858 140,271 0.3227 0.0937
425 163,146 139,306 0.3213 0.1514
450 163,777 138,699 0.3199 0.1708
475 163,153 138,113 0.3185 0.1894
500 162,688 136,835 0.3123 0.2036
  • R1变化幅度10.99% — 对风险影响极大
  • 较低容量上限400可将风险降低近一半同时维持较高的质量加权服务量(E2)。

4. CV阈值 — 准入敏感

cv_max 配对数 E1 E2 F1 R1
0.3 25 157,907 135,824 0.3190 0.1810
0.4 31 161,248 137,282 0.3188 0.1748
0.5 34 163,777 138,699 0.3199 0.1708
0.6 35 163,951 138,873 0.3197 0.1659
  • E1变化幅度3.69%
  • 增加CV阈值允许更多高波动性站点配对略微提升总量但需谨慎对待。

7.3 敏感性结论与汇总

参数 E1影响范围 E2影响范围 R1影响范围 结论
merge_ratio 9.68% 3.13% 0.00% ⚠️ 关键决策参数
l_max 0.98% 0.91% 0.49% 参数稳健
mu_sum_max 0.66% 2.48% 10.99% ⚠️ 风险控制参数
cv_max 3.69% 2.20% 1.51% 较稳健

建议

  1. 合并比例是最敏感参数,需根据风险承受能力选择
  2. 距离阈值CV阈值影响有限,模型稳健
  3. 容量上限影响风险水平保守选择400可降低风险50%

8. 结果验证

8.1 约束满足检验

检验项 要求 实际 结果
每日访问事件数 2 min=2, max=2 通过
年度总事件数 730 730 通过
站点覆盖 全覆盖 70/70 通过
$q^*$边界检查 在[q_lower, q_upper]内 34/34在边界内 通过

8.2 模型有效性验证

与Task 1对比

  • E1提升16.9%:释放的槽位被有效利用
  • F1几乎不变公平性未受损
  • R1可控17.1%的缺口风险在合理范围

物理合理性

  • 高价值配对的需求和接近容量平均413
  • 最优分配比例接近50%平均50.6%
  • 低需求配对的双站点次数较少(合理)

9. 待实现:可视化图表

9.1 图表清单

图编号 图名 内容 目的
Fig.1 站点配对地图 70站点+34条配对连线 展示空间分布
Fig.2 分配策略散点图 q* vs (μ_i, σ_i, σ_j) 验证分配逻辑
Fig.3 敏感性曲线 4参数对E1,E2,R1的影响 参数选择依据
Fig.4 日历热力图 365天×2槽位 排程可视化
Fig.5 风险分布图 34对的缺口概率分布 风险识别

9.2 可视化脚本(待实现)

task3/
├── 08_visualize.py      # 可视化脚本
└── figures/
    ├── fig1_pairing_map.png
    ├── fig2_allocation_scatter.png
    ├── fig3_sensitivity.png
    ├── fig4_calendar_heatmap.png
    └── fig5_risk_distribution.png

10. 结论与政策建议

10.1 主要发现

  1. 配对收益双站点模式可节省19.5%的访问槽位服务量提升16.9%
  2. 分配策略:最优分配量 q^* 与两站点需求波动性成反比——波动大的站点需要更多"缓冲"
  3. 风险可控通过合理的配对选择和鲁棒性约束服务缺口风险控制在17%以内
  4. 参数稳健:除合并比例外,其他参数对结果影响有限

10.2 对FBST的建议

建议 理由
采用双站点模式 可释放19.5%资源服务更多需求
优先配对低需求、地理相近站点 容量利用率高,风险低
保留高需求站点的单独访问 避免服务不足
记录双站点访问的实际服务量 校准模型参数
合并比例取1/2 平衡效率与风险

10.3 模型局限性

  1. 需求独立性假设:实际中相邻站点需求可能相关
  2. 服务时间固定:大需求站点可能需要更长服务时间
  3. 天气因素未纳入可与Task 2结合考虑
  4. 简化的不确定性传播:忽略了 S_iS_j 的随机影响

附录A关键公式速查

公式 用途 来源
q^* = \frac{\sigma_j \mu_i + \sigma_i (Q - \mu_j)}{\sigma_i + \sigma_j} 最优第一站点分配 4.2节推导
V_{ij} = \alpha \frac{\mu_i + \mu_j}{Q} - \beta \frac{l_{ij}}{l_{max}} - \gamma \frac{\sigma_i^2 + \sigma_j^2}{(\mu_i + \mu_j)^2} 配对价值函数 3.2节设计
E[\min(X, c)] = \mu \Phi(z) - \sigma \phi(z) + c(1-\Phi(z)) 截断正态期望 统计引理
q(\mu) = \min(1, 250/\mu) 质量折扣因子 Task 1定义
k_{ij} = \lfloor \min(k_i, k_j) / 2 \rfloor 合并次数 5.1节设计

附录B程序流水线

task3/
├── 01_distance.py      ✅ 距离矩阵计算
│   └── 01_distance.xlsx    (70×70矩阵)
├── 02_pairing.py       ✅ 配对筛选与选择
│   └── 02_pairing.xlsx     (34对配对)
├── 03_allocation.py    ✅ 最优分配计算
│   └── 03_allocation.xlsx  (q*值)
├── 04_reschedule.py    ✅ 访问次数重分配
│   └── 04_reschedule.xlsx  (k'值)
├── 05_calendar.py      ✅ 日历排程生成
│   └── 05_calendar.xlsx    (365天)
├── 06_evaluate.py      ✅ 效果评估
│   └── 06_evaluate.xlsx    (指标对比)
├── 07_sensitivity.py   ✅ 敏感性分析
│   └── 07_sensitivity.xlsx (4参数)
├── 08_visualize.py     ⏳ 可视化(待实现)
│   └── figures/            (5张图)
└── README.md           ✅ 本文档

附录C运行命令

cd task3

# 完整流程
python 01_distance.py
python 02_pairing.py
python 03_allocation.py
python 04_reschedule.py
python 05_calendar.py
python 06_evaluate.py
python 07_sensitivity.py

# 一键运行(可选)
for i in 01 02 03 04 05 06 07; do python ${i}_*.py; done

附录D参数设置汇总

参数 符号 基准值 敏感性 依据
卡车容量 Q 400户 - 数据推断
距离阈值 l_{max} 50 mi 时间预算
容量上限 \mu_{sum,max} 450 中(风险) Q+10%
CV上限 CV_{max} 0.5 经验值
合并比例 r_{merge} 1/2 效率-风险平衡
鲁棒性水平 k 1 - 84%保护
质量阈值 \bar{C} 250 - Task 1定义