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

2.7 KiB
Raw Blame History

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