# 方案优选与鲁棒性 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 全局敏感性。