aps-agent/docs/algorithm/solution-selection-v1.md

45 lines
2.7 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.

# 方案优选与鲁棒性 v1(SC-14)
> 代码:`server/aps_domain/scenario_selection.py`、`server/aps_domain/robustness.py`
> 接入:`server/aps_domain/scenario.py`、`server/aps_domain/sensitivity.py`
> 测试:`tests/golden/test_scenario_selection.py`
---
## 1. 候选方案优选
`scenario.compare` 保留五策略沙盒试排,在原卡片契约上追加以下决策链:
1. **硬过滤**:存在启用的硬约束冲突时标记 `HARD_REJECTED`,不产生推荐。
2. **帕累托筛选**:延期、冲突、成本、换型最小化;利用率、负荷均衡最大化。被全面支配的方案标记 `DOMINATED`。
3. **归一化加权**:仅对帕累托前沿做 min-max 归一化与加权排序;某维全等时归一值统一为 1,避免除零与 NaN。
4. **鲁棒性并列**:加权分相同时,以固定种子蒙特卡洛鲁棒性优先,再按稳定策略键打破完全平局。
权重来自 `scheduleParams.weights`:延期、成本、利用率、负荷均衡四项分别映射到同名 KPI。返回卡片新增 `hardFeasible`、`isPareto`、`normalizedKpi`、`weightedScore`、`rank`、`isRecommended` 和 `robustness`;原字段与采用动作保持兼容。
若所有候选都违反硬约束,`recommendationId=null`,系统明确提示先处理硬冲突,不用“最不坏”方案冒充可采纳方案。
---
## 2. 固定种子蒙特卡洛
每个样本都深拷贝世界并真实重跑排产引擎,不用 KPI 公式伪造仿真。v1 使用固定种子 `20260731`、默认 24 个样本,联合扰动:
- 订单量:截断正态分布,范围 `0.80~1.20`;
- 产线效率:截断正态分布,范围 `0.75~1.25`;
- 产能冲击:15% 概率随机选择一条产线,将效率临时压至 55%。
验收标准由方案基线派生:无硬约束违规、冲突数不高于基线、总延期不超过基线加 10%(至少留 1 小时容差)。`robustness` 是全部标准仍满足的样本比例,同时返回延期 P50/P90/P95/最大值与平均冲突数。
相同世界、参数、样本数和种子必须逐项可复算;所有运行位于 Explore 深拷贝沙盒,不写主世界。
---
## 3. API 与边界
- `scenario.compare` 的 `scenario-cards` 块新增 `recommendationId`、`paretoScenarioIds` 和 `selectionMethod`。
- 现有 `GET /api/scenario/sensitivity` 无需改路由,继续透传 `run_sensitivity`,新增 `monteCarlo` 字段。
- 现有 Tornado `baseline/rows/markdown`、场景卡旧字段和 `scenario.apply` 入参均保持不变。
本切片不是 NSGA-II 求解器,也不是生产级数百样本并行平台。待办仍包括历史分布校准、后台进程池/远程算力、更多扰动因子、偏好学习权重和 Sobol 全局敏感性。