2.7 KiB
方案优选与鲁棒性 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 保留五策略沙盒试排,在原卡片契约上追加以下决策链:
- 硬过滤:存在启用的硬约束冲突时标记
HARD_REJECTED,不产生推荐。 - 帕累托筛选:延期、冲突、成本、换型最小化;利用率、负荷均衡最大化。被全面支配的方案标记
DOMINATED。 - 归一化加权:仅对帕累托前沿做 min-max 归一化与加权排序;某维全等时归一值统一为 1,避免除零与 NaN。
- 鲁棒性并列:加权分相同时,以固定种子蒙特卡洛鲁棒性优先,再按稳定策略键打破完全平局。
权重来自 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 全局敏感性。