28 KiB
Task 3: 双站点同车访问的随机优化方案
摘要
本文针对"同一辆卡车在单次行程中访问两个站点"的调度优化问题,提出一套基于随机优化的完整解决方案。核心创新点:
- 问题本质识别:将第一站点分配决策建模为两阶段随机优化问题,正确处理"第二站点需求不确定"的核心难点
- 共生站点配对模型:综合考虑距离、容量、波动性三维约束,构建配对价值函数
- 解析最优分配策略:推导出闭式解
q^* = \frac{\sigma_j \mu_i + \sigma_i (Q - \mu_j)}{\sigma_i + \sigma_j} - 风险可控的全局调度:在提升效率的同时,将服务缺口风险控制在可接受范围
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次单站点访问中,哪些应改为双站点访问?
决策逻辑:
- 对于配对 $(i, j) \in P$,合并其部分访问
- 设原频次为 $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 = 38Q = 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 主要发现
- 配对收益:双站点模式可节省约4%的访问次数,释放资源服务更多需求
- 分配策略:最优分配量
q^*与两站点需求波动性成反比——波动大的站点需要更多"缓冲" - 风险可控:通过鲁棒性约束,服务缺口概率控制在12%以内
10.2 对FBST的建议
| 建议 | 理由 |
|---|---|
| 优先配对低需求、地理相近站点 | 容量利用率高,风险低 |
| 保留高需求站点的单独访问 | 避免服务不足 |
| 记录双站点访问的实际服务量 | 校准模型参数 |
| 建立动态调整机制 | 季度复盘,调整配对策略 |
10.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/ # 可视化输出