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

743 lines
28 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.
# 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
```python
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
```python
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版本
```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/ # 可视化输出
```