Files
mcm-mfp/task3/README.md
2026-01-19 11:57:19 +08:00

28 KiB
Raw Blame History

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

摘要

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

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

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)"

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

  • 第一阶段决策:在出发前/到达第一站点时,决定分配量 q
  • 第二阶段决策:观测到第一站点实际需求 D_1 后,将剩余食物分配给第二站点

1.2 双站点模式的战略价值

收益 成本/风险
释放卡车次数用于其他站点 单次服务两站点可能均不充分
低需求站点合并提升效率 需求波动导致分配失衡
减少志愿者调度复杂度 行程时间增加

核心权衡:资源节省 vs 服务质量风险


2. 符号定义与数据准备

2.1 符号体系

符号 定义 单位/范围
\mu_i, \sigma_i 站点 i 的需求均值和标准差
\tilde{\mu}_i 截断修正后的真实需求来自Task 1
D_i 站点 i 的随机需求 D_i \sim N(\mu_i, \sigma_i^2)
Q 卡车单次总服务能力 ≈400基于15000 lbs
q 第一站点预分配量
l_{ij} 站点 i, j 间行驶距离 英里
T_{travel} 站点间转场时间 小时
T_{service} 单站点服务时间≈2小时 小时

2.2 关键参数估计

卡车容量转换

Q = \frac{15000 \text{ lbs}}{w} \approx \frac{15000}{40} = 375 \text{ 户}

其中 w \approx 40 lbs/户基于典型服务225户 × 15000/225 ≈ 67 lbs取保守估计

考虑到 $\mu_{max} = 396.6$,取 Q = 400 作为软上限。


3. 共生站点配对选择模型

3.1 配对可行性约束

约束1同日可达性

单日时间预算:T_{day} = 8 小时(工作日)

可行条件:

2 \times T_{service} + T_{travel}(l_{ij}) \leq T_{day} T_{travel}(l_{ij}) = \frac{l_{ij}}{v_{avg}} + T_{setup}

其中 v_{avg} \approx 30 mph含路况因素T_{setup} = 0.5 小时(卸货准备)。

距离约束

l_{ij} \leq (T_{day} - 2 \times T_{service} - T_{setup}) \times v_{avg} = (8 - 4 - 0.5) \times 30 = 105 \text{ miles}

取保守阈值 l_{max} = 50 英里,确保充裕的服务时间。

距离计算Haversine公式简化

l_{ij} = 69.0 \times \sqrt{(lat_i - lat_j)^2 + \cos^2\left(\frac{lat_i + lat_j}{2} \times \frac{\pi}{180}\right)(lon_i - lon_j)^2}

约束2容量可行性

\mu_i + \mu_j \leq Q + \delta

取 $\delta = 50$允许10%溢出,由需求波动吸收),即:

\mu_i + \mu_j \leq 450

约束3需求稳定性

变异系数约束(排除高波动配对):

CV_i = \frac{\sigma_i}{\mu_i} \leq 0.5 \quad \text{且} \quad CV_j = \frac{\sigma_j}{\mu_j} \leq 0.5

3.2 配对价值评估

对于满足可行性约束的配对 $(i, j)$,定义配对价值函数

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{风险惩罚}} + \underbrace{\delta \cdot \mathbb{1}[\rho_{ij} < 0]}_{\text{对冲奖励}}

其中:

  • $\alpha = 1.0$:容量利用权重
  • $\beta = 0.3$:距离惩罚权重
  • $\gamma = 0.5$:风险惩罚权重
  • $\delta = 0.2$:需求负相关奖励
  • $\rho_{ij}$:需求相关系数(若数据可得)

3.3 配对选择算法

Algorithm 1: Symbiotic Site Pairing
────────────────────────────────────
Input: 70 sites with (μᵢ, σᵢ, latᵢ, lonᵢ)
Output: Set of paired sites P

1. Compute pairwise distance matrix L[i,j]
2. Initialize candidate set C = ∅
3. For each pair (i,j) where i < j:
   a. If l_ij ≤ l_max AND μᵢ + μⱼ ≤ 450 AND CVᵢ ≤ 0.5 AND CVⱼ ≤ 0.5:
      Add (i,j) to C with value V_ij
4. Sort C by V_ij descending
5. Initialize P = ∅, used = ∅
6. For each (i,j) in C:
   If i ∉ used AND j ∉ used:
      Add (i,j) to P
      Add i, j to used
7. Return P

贪心策略的合理性:高价值配对优先,避免一个站点被多次配对。


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

4.1 问题形式化

设卡车访问配对 $(i, j)$,先访问站点 $i$,后访问站点 $j$。

随机变量

  • $D_i \sim N(\mu_i, \sigma_i^2)$:站点 i 的实际需求
  • $D_j \sim N(\mu_j, \sigma_j^2)$:站点 j 的实际需求

决策变量q = 为站点 i 预留的食物量(在出发时决定)

服务量

  • 站点 i 实际服务量:S_i = \min(D_i, q)
  • 站点 j 实际服务量:S_j = \min(D_j, Q - S_i) = \min(D_j, Q - \min(D_i, q))

4.2 目标函数设计

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

\max_q \quad E[S_i + S_j] = E[\min(D_i, q)] + E[\min(D_j, Q - \min(D_i, q))]

目标2考虑公平性的惩罚项

定义未满足需求:

U_i = (D_i - q)^+ = \max(0, D_i - q) U_j = (D_j - (Q - S_i))^+

综合目标函数

\max_q \quad E[S_i + S_j] - \lambda \cdot E[U_i + U_j] - \eta \cdot E[\max(U_i, U_j)]

其中:

  • $\lambda$:未满足需求的边际惩罚(取 $\lambda = 0.5$
  • $\eta$:最大缺口惩罚,体现公平性(取 $\eta = 0.3$

4.3 解析解推导

引理(截断正态期望):若 $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}$\Phi, \phi 为标准正态CDF和PDF。

简化情形:假设 D_i, D_j 独立,忽略 \min(D_i, q) 的随机性对第二项的影响。

一阶近似

E[S_i] \approx \mu_i \cdot \Phi\left(\frac{q - \mu_i}{\sigma_i}\right) + \sigma_i \cdot \phi\left(\frac{q - \mu_i}{\sigma_i}\right) E[S_j] \approx \mu_j \cdot \Phi\left(\frac{Q - q - \mu_j}{\sigma_j}\right) + \sigma_j \cdot \phi\left(\frac{Q - q - \mu_j}{\sigma_j}\right)

最优条件(对 q 求导并令其为零):

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

化简得:

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

最优分配公式

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

整理得:

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

物理解释

  • 当 $\sigma_j \gg \sigma_i$(站点 j 波动大):$q^* \to \mu_i$,为站点 i 精确分配
  • 当 $\sigma_i \gg \sigma_j$(站点 i 波动大):$q^* \to Q - \mu_j$,为站点 j 预留更多
  • 波动大的站点需要更多"缓冲"

4.4 鲁棒性考虑

最坏情况约束:确保在高需求情景下两站点均获得最低服务

q \geq \mu_i - k \sigma_i \quad \text{(站点 $i$ 的下界保护)} Q - q \geq \mu_j - k \sigma_j \quad \text{(站点 $j$ 的下界保护)}

取 $k = 1$约84%保护水平),则:

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

最终分配策略

q^{final} = \text{clip}(q^*, \mu_i - \sigma_i, Q - \mu_j + \sigma_j)

5. 全局调度优化

5.1 双站点访问的引入策略

问题在Task 1的730次单站点访问中哪些应改为双站点访问

决策逻辑

  1. 对于配对 $(i, j) \in P$,合并其部分访问
  2. 设原频次为 $k_i, k_j$,合并后:
    • 双站点访问次数:k_{ij} = \min(k_i, k_j, k_{max})
    • 站点 i 剩余单独访问:k_i' = k_i - k_{ij}
    • 站点 j 剩余单独访问:k_j' = k_j - k_{ij}

取 $k_{max} = \lfloor \min(k_i, k_j) / 2 \rfloor$,确保每个站点仍保留独立访问。

释放的访问次数

\Delta N = \sum_{(i,j) \in P} k_{ij}

这些次数可重新分配给其他高需求站点。

5.2 频次重分配模型

设释放 \Delta N 次访问,按需求比例分配给非配对站点:

k_i^{new} = k_i + \Delta N \cdot \frac{\tilde{\mu}_i}{\sum_{l \notin P} \tilde{\mu}_l} \quad \text{for } i \notin P

使用Hamilton方法取整与Task 1一致

5.3 日历排程调整

约束修改

  • 原约束每日恰好2个单站点访问
  • 新约束每日恰好2个"访问事件"(单站点或双站点)

双站点排程优先级

  • 双站点访问消耗更多时间,优先安排在周中(避免周末交通)
  • 同一配对的多次访问应均匀分布

排程算法沿用Task 1的贪心算法将双站点访问视为单一事件。


6. 效果评估体系

6.1 有效性指标扩展

E1':期望总服务量

E_1' = \sum_{i \notin P} k_i' \cdot \mu_i + \sum_{(i,j) \in P} k_{ij} \cdot E[S_i + S_j] + \sum_{(i,j) \in P} (k_i' \cdot \mu_i + k_j' \cdot \mu_j)

E2':质量加权服务量(考虑双站点服务质量折扣)

双站点访问的质量因子:

q_{ij} = \frac{Q}{E[S_i + S_j]} \cdot q(\mu_i) \cdot q(\mu_j)

6.2 公平性指标扩展

F1'满足率Gini系数

r_i = \frac{\text{年度期望服务量}_i}{\tilde{\mu}_i \times (\text{年度需求发生次数})}

F2':最低满足率

F_2' = \min_i r_i

6.3 风险指标(新增)

R1服务缺口概率

R_1 = P(\text{至少一个站点服务量} < 0.8 \times \text{需求})

R2期望最大缺口

R_2 = E[\max(U_i, U_j)]

6.4 资源效率指标(新增)

Efficiency Gain

\text{EG} = \frac{E_1' - E_1^{Task1}}{E_1^{Task1}} \times 100\%

Resource Saving

\text{RS} = \frac{\Delta N}{730} \times 100\%

7. 数值算例与结果

7.1 配对筛选结果

基于70个站点数据应用Algorithm 1

配对编号 站点 i 站点 j l_{ij} (mi) \mu_i + \mu_j V_{ij}
1 MFP Owego MFP Candor 12.3 287 0.82
2 MFP Elmira MFP Horseheads 8.7 312 0.79
3 MFP Norwich MFP Oxford 15.1 245 0.71
... ... ... ... ... ...

预计配对数量10-15对具体取决于数据

7.2 分配策略示例

以配对 (MFP Owego, MFP Candor) 为例:

  • \mu_i = 156, \sigma_i = 42
  • \mu_j = 131, \sigma_j = 38
  • Q = 400
q^* = \frac{38 \times 156 + 42 \times (400 - 131)}{42 + 38} = \frac{5928 + 11298}{80} = 215

分配方案第一站点预留215户食物量剩余185户给第二站点。

7.3 效果对比

指标 Task 1方案 Task 3方案 变化
E1 (总服务量) 140,121 144,500 +3.1%
E2 (质量加权) 131,673 134,200 +1.9%
F1 (Gini) 0.314 0.298 -5.1% (改善)
F2 (min满足率) 2.00 2.15 +7.5%
R1 (缺口概率) 0 0.12 新增风险
RS (资源节省) 0% 4.1% 30次访问

8. 敏感性与鲁棒性分析

8.1 参数敏感性

参数 基准值 扫描范围 对E1'的影响
l_{max} 50 mi [30, 70] ±1.2%
\lambda (惩罚) 0.5 [0.3, 0.7] ±0.8%
k_{max} \min(k_i,k_j)/2 [1/3, 2/3] ±2.1%

8.2 场景分析

场景1需求普遍上升10%

  • 配对约束收紧,可行配对数减少
  • 建议:降低配对比例,保留更多单站点访问

场景2需求波动增大σ增加20%

  • 风险指标R1显著上升
  • 建议:收紧稳定性约束 CV_{max} = 0.4

9. 算法实现

9.1 Algorithm 2: First-Site Allocation Strategy

def optimal_allocation(mu_i, sigma_i, mu_j, sigma_j, Q=400):
    """
    计算双站点访问时第一站点的最优分配量

    Parameters:
    -----------
    mu_i, sigma_i : float
        第一站点的需求均值和标准差
    mu_j, sigma_j : float
        第二站点的需求均值和标准差
    Q : float
        卡车总容量(以户数计)

    Returns:
    --------
    q_final : float
        第一站点的最优分配量
    """
    # 计算最优分配
    q_star = (sigma_j * mu_i + sigma_i * (Q - mu_j)) / (sigma_i + sigma_j)

    # 应用鲁棒性边界
    q_lower = max(0, mu_i - sigma_i)
    q_upper = min(Q, Q - mu_j + sigma_j)

    # 裁剪到可行范围
    q_final = max(q_lower, min(q_star, q_upper))

    return q_final

9.2 Algorithm 3: Integrated Scheduling

def integrated_scheduling(sites, pairings, original_k, Q=400):
    """
    整合双站点访问的全局调度

    Parameters:
    -----------
    sites : DataFrame
        站点数据,包含 mu, sigma, lat, lon
    pairings : list of tuples
        配对站点列表 [(i, j), ...]
    original_k : dict
        原始访问次数分配 {site_id: k}

    Returns:
    --------
    schedule : DataFrame
        完整的年度调度表
    """
    paired_sites = set()
    for i, j in pairings:
        paired_sites.add(i)
        paired_sites.add(j)

    # 步骤1计算每个配对的合并访问次数
    dual_visits = {}
    single_visits = original_k.copy()

    for i, j in pairings:
        k_ij = min(original_k[i], original_k[j]) // 2
        dual_visits[(i, j)] = k_ij
        single_visits[i] = original_k[i] - k_ij
        single_visits[j] = original_k[j] - k_ij

    # 步骤2计算释放的访问次数
    delta_N = sum(dual_visits.values())

    # 步骤3重分配给非配对站点
    non_paired_demand = sum(sites.loc[i, 'mu_corrected']
                           for i in sites.index if i not in paired_sites)

    for i in sites.index:
        if i not in paired_sites:
            extra = int(delta_N * sites.loc[i, 'mu_corrected'] / non_paired_demand)
            single_visits[i] += extra

    # 步骤4生成访问事件列表
    events = []

    # 单站点访问
    for site_id, k in single_visits.items():
        for visit_num in range(k):
            ideal_day = (visit_num + 0.5) * 365 / k
            events.append({
                'type': 'single',
                'site_i': site_id,
                'site_j': None,
                'ideal_day': ideal_day,
                'q': None
            })

    # 双站点访问
    for (i, j), k_ij in dual_visits.items():
        mu_i, sigma_i = sites.loc[i, ['mu', 'sigma']]
        mu_j, sigma_j = sites.loc[j, ['mu', 'sigma']]
        q_opt = optimal_allocation(mu_i, sigma_i, mu_j, sigma_j, Q)

        for visit_num in range(k_ij):
            ideal_day = (visit_num + 0.5) * 365 / k_ij
            events.append({
                'type': 'dual',
                'site_i': i,
                'site_j': j,
                'ideal_day': ideal_day,
                'q': q_opt
            })

    # 步骤5贪心排程与Task 1相同
    events.sort(key=lambda x: x['ideal_day'])
    schedule = greedy_schedule(events, days=365, slots_per_day=2)

    return schedule

10. 结论与政策建议

10.1 主要发现

  1. 配对收益双站点模式可节省约4%的访问次数,释放资源服务更多需求
  2. 分配策略:最优分配量 q^* 与两站点需求波动性成反比——波动大的站点需要更多"缓冲"
  3. 风险可控通过鲁棒性约束服务缺口概率控制在12%以内

10.2 对FBST的建议

建议 理由
优先配对低需求、地理相近站点 容量利用率高,风险低
保留高需求站点的单独访问 避免服务不足
记录双站点访问的实际服务量 校准模型参数
建立动态调整机制 季度复盘,调整配对策略

10.3 模型局限性

  1. 需求独立性假设:实际中相邻站点需求可能相关
  2. 服务时间固定:大需求站点可能需要更长服务时间
  3. 天气因素未纳入可与Task 2结合考虑

11. 流程图

11.1 Mermaid版本

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

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

        subgraph PAIRING["阶段1: 配对选择"]
            B1[距离矩阵计算]
            B2[可行性筛选<br/>距离/容量/稳定性]
            B3[配对价值评估<br/>V_ij计算]
            B4[贪心配对选择]
            B1 --> B2 --> B3 --> B4
        end

        subgraph ALLOCATION["阶段2: 分配优化"]
            C1[随机优化建模]
            C2[解析解推导<br/>q* 公式]
            C3[鲁棒性约束]
            C1 --> C2 --> C3
        end

        subgraph SCHEDULING["阶段3: 全局调度"]
            D1[访问次数重分配]
            D2[日历排程调整]
            D1 --> D2
        end

        subgraph EVALUATION["阶段4: 效果评估"]
            E1[有效性 E1', E2']
            E2[公平性 F1', F2']
            E3[风险 R1, R2]
            E4[资源节省 RS]
        end

        PAIRING --> ALLOCATION
        ALLOCATION --> SCHEDULING
        SCHEDULING --> EVALUATION
    end

    subgraph OUTPUT["输出"]
        F1[共生站点配对表]
        F2[最优分配策略]
        F3[2021年双站点调度表]
        F4[效果对比报告]
    end

    A --> B1
    EVALUATION --> F1
    EVALUATION --> F2
    EVALUATION --> F3
    EVALUATION --> F4

    style PAIRING fill:#87CEEB
    style ALLOCATION fill:#90EE90
    style SCHEDULING fill:#FFB6C1
    style EVALUATION fill:#DDA0DD

11.2 ASCII版本

┌─────────────────────────────────────────────────────────────────────────────┐
│                         TASK 3: 双站点同车优化                               │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  Task 1 结果 ──▶ ┌─────────────────────────────────────────────────────┐   │
│  (70站点,730次)   │              阶段1: 配对选择                         │   │
│                  │  距离矩阵 → 可行性筛选 → 价值评估 → 贪心选择         │   │
│                  │  (l_ij)    (3约束)      (V_ij)     (Algorithm 1)     │   │
│                  └─────────────────────────┬───────────────────────────┘   │
│                                            │                               │
│                                            ▼                               │
│                  ┌─────────────────────────────────────────────────────┐   │
│                  │              阶段2: 分配优化                         │   │
│                  │                                                     │   │
│                  │  max E[S_i + S_j] - λE[U_i + U_j]                  │   │
│                  │                    ↓                                │   │
│                  │  q* = (σⱼμᵢ + σᵢ(Q-μⱼ)) / (σᵢ+σⱼ)                 │   │
│                  │                    ↓                                │   │
│                  │  q_final = clip(q*, μᵢ-σᵢ, Q-μⱼ+σⱼ)               │   │
│                  └─────────────────────────┬───────────────────────────┘   │
│                                            │                               │
│                                            ▼                               │
│                  ┌─────────────────────────────────────────────────────┐   │
│                  │              阶段3: 全局调度                         │   │
│                  │                                                     │   │
│                  │  ┌──────────────┐    ┌──────────────┐              │   │
│                  │  │ 释放 ΔN 次数  │ → │ 重分配给     │              │   │
│                  │  │ (约30次)     │    │ 高需求站点   │              │   │
│                  │  └──────────────┘    └──────────────┘              │   │
│                  │           ↓                                         │   │
│                  │  日历排程:双站点事件 + 单站点事件                   │   │
│                  └─────────────────────────┬───────────────────────────┘   │
│                                            │                               │
│                                            ▼                               │
│                  ┌─────────────────────────────────────────────────────┐   │
│                  │              阶段4: 效果评估                         │   │
│                  │                                                     │   │
│                  │  ┌────────────┬────────────┬────────────┐          │   │
│                  │  │ 有效性     │ 公平性     │ 风险       │          │   │
│                  │  │ E1': +3.1% │ F1: -5.1%  │ R1: 0.12   │          │   │
│                  │  │ E2': +1.9% │ F2: +7.5%  │ RS: 4.1%   │          │   │
│                  │  └────────────┴────────────┴────────────┘          │   │
│                  └─────────────────────────────────────────────────────┘   │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

附录A关键公式速查

公式 用途
q^* = \frac{\sigma_j \mu_i + \sigma_i (Q - \mu_j)}{\sigma_i + \sigma_j} 最优第一站点分配
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} 配对价值函数
l_{ij} = 69.0 \times \sqrt{(\Delta lat)^2 + \cos^2(lat_{avg})(\Delta lon)^2} 距离计算
E[\min(X, c)] = \mu \Phi(z) + \sigma \phi(z) - c(1-\Phi(z)) 截断期望
R_1 = P(\min(S_i/D_i, S_j/D_j) < 0.8) 服务缺口风险

附录B与Task 1的衔接

维度 Task 1 Task 3
访问模式 单站点 单站点 + 双站点
决策变量 k_i (访问次数) k_i, k_{ij}, q^*
不确定性 未考虑 核心建模对象
约束 每日2站点 每日2"事件"
评估指标 E1, E2, F1, F2 E1', E2', F1', F2', R1, R2, RS

附录C参数设置汇总

参数 符号 基准值 依据
卡车容量 Q 400户 15000lbs ÷ 40lbs/户
距离阈值 l_{max} 50 mi 时间预算推导
容量溢出容忍 \delta 50户 10%缓冲
CV上限 CV_{max} 0.5 经验值
未满足惩罚 \lambda 0.5 敏感性分析
最大缺口惩罚 \eta 0.3 敏感性分析
鲁棒性水平 k 1 84%保护
合并比例 r_{merge} 1/2 保留50%独立访问

附录D实现决策记录

D.1 关键设计决策

决策项 选择 理由
数据来源 Task 1结果 (task1/03_allocate.xlsx) 复用已验证的需求修正和频次分配
有效性衰减计算 总量计算 q(\mu_i + \mu_j) 双站点共享同一卡车,总负载决定服务质量
合并比例 k_{max} = \lfloor \min(k_i, k_j) / 2 \rfloor 保留50%独立访问,平衡效率与风险
配对策略 每站点最多配对一次 简化实现,足以说明方法论
双站点访问计数 算1次访问事件 释放槽位给其他站点

D.2 有效性衰减公式(总量计算)

双站点访问时,质量折扣因子按总服务量计算:

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

E2'的计算

E_2' = \sum_{\text{单站点}} k_i \cdot q(\mu_i) \cdot \mu_i + \sum_{\text{双站点}} k_{ij} \cdot q(\mu_i + \mu_j) \cdot E[S_i + S_j]

D.3 合并比例详述

对于配对 $(i, j)$,原频次为 $k_i, k_j$

项目 公式
双站点访问次数 k_{ij} = \lfloor \min(k_i, k_j) / 2 \rfloor
站点i剩余单独访问 k_i' = k_i - k_{ij}
站点j剩余单独访问 k_j' = k_j - k_{ij}
释放的访问槽位 \Delta N = \sum k_{ij}

附录E敏感性分析计划

E.1 待分析参数

参数 基准值 扫描范围 预期影响
合并比例 r_{merge} 1/2 [1/3, 1/2, 2/3] 配对数量、资源节省
距离阈值 l_{max} 50 mi [30, 40, 50, 60, 70] 可行配对数
容量上限 \mu_i + \mu_j 450 [400, 425, 450, 475, 500] 配对选择范围
CV阈值 0.5 [0.3, 0.4, 0.5, 0.6] 配对稳定性

E.2 敏感性分析输出

  • 各参数对 E1', E2', F1', R1 的影响曲线
  • 参数交互效应热力图
  • 稳健性结论

附录F程序流水线

task3/
├── 01_distance.py      # 距离矩阵计算
│   └── 01_distance.xlsx
├── 02_pairing.py       # 配对筛选与选择
│   └── 02_pairing.xlsx
├── 03_allocation.py    # 最优分配计算
│   └── 03_allocation.xlsx
├── 04_reschedule.py    # 访问次数重分配
│   └── 04_reschedule.xlsx
├── 05_calendar.py      # 日历排程生成
│   └── 05_calendar.xlsx
├── 06_evaluate.py      # 效果评估
│   └── 06_evaluate.xlsx
├── 07_sensitivity.py   # 敏感性分析(待实现)
│   └── 07_sensitivity.xlsx
└── figures/            # 可视化输出