zcbot/skills/analyze/references/doe_planning.md

4.4 KiB

DoE(实验设计)选型

何时启动:叶子节点类型 = 优化型。典型场景:多个工艺 / 配方变量同时影响输出,要找主效应、二阶交互、或最优组合。

选型导航

你想要 因素数 推荐设计 实验次数 后续分析
看哪些因素是主效应(筛选) 6-15 Plackett-Burman k+4 ~ 4(k+1)/4 t 检验主效应,接 statsmodels OLS
看主效应 + 二阶交互 3-7 部分因子 2^(k-p) / 全因子 2^k 8-32 ANOVA + 交互项
找最优响应面 2-5 中心复合(CCD)/ Box-Behnken 15-30 二阶响应面 + 等高线
配方约束(组分和 = 1) 2-5 混料设计(Simplex / Extreme-Vertices) 视约束而定 Scheffé 多项式
实验昂贵 / 序贯优化 不固定 序贯单纯形 / 贝叶斯优化 视收敛而定 scipy.optimize / scikit-optimize / optuna

各设计速查

Plackett-Burman(筛选)

  • 用法:把"可能有影响的"6-15 个因素一起测,8-12 次实验筛出主效应
  • 假设:只看主效应,忽略交互(因素 > 7 时全因子代价爆炸,先筛主效应再深入)
  • 输出:每个因素的效应大小 + p value,p < 0.05 的进下一轮
  • 工具:pyDOE2.pbdesign / statsmodels OLS

全因子 / 部分因子(2^k)

  • 用法:每个因素 2 水平(高 / 低),全组合(全因子)或挑一部分(部分因子,牺牲高阶交互的分辨率)
  • 适合 k ≤ 5 全因子(32 次),k ≤ 8 部分因子
  • 输出:主效应 + 所有二阶交互 + ANOVA p value
  • 工具:pyDOE2.fullfact / pyDOE2.fracfact

中心复合 / Box-Behnken(响应面)

  • 用法:每因素 3-5 水平(含中心点 + 轴点),拟合二阶多项式响应面
  • 假设:输出对自变量光滑可微,二阶展开够用(强非线性场景不适用,要看残差图)
  • 输出:y = β0 + Σβi·xi + Σβii·xi² + Σβij·xi·xj 拟合系数 + R² + 等高线最优点
  • 工具:pyDOE2.ccdesign / pyDOE2.bbdesign → sklearn / statsmodels 拟合 → matplotlib 等高线

混料设计(Mixture)

  • 用法:配方比例之和 = 1(水泥 + 矿粉 + 粉煤灰 = 100%),自变量受约束
  • 不适用全因子(违反约束)
  • 输出:Scheffé 多项式 y = a·x1 + b·x2 + c·x3 + d·x1·x2 + ...
  • 工具:pyDOE2 不直接支持混料,用 R mixexp 或自己生成单纯形格点 / Extreme-Vertices 算法

序贯优化(贝叶斯 / 单纯形)

  • 用法:实验昂贵 / 不能并行 / 不知道因素范围时,边做边学
  • 输出:每轮推荐下一个实验点(EI / UCB 等准则)
  • 工具:scikit-optimize / optuna / Ax(Meta)

工作流(analyze 阶段产出什么)

analysis.md §5 对应叶子小节里写:

## 叶子 X: 配方因素对 28d 抗压强度的影响 — 优化型

### 实验设计

- 设计类型: Plackett-Burman 筛选(候选因素 7 个)
- 因素表:
  | 编号 | 因素 | 低水平 | 高水平 | 单位 |
  |---|---|---|---|---|
  | A | 矿粉掺量 | 10 | 30 | % |
  | B | 粉煤灰掺量 | 5 | 25 | % |
  | C | 水灰比 | 0.30 | 0.40 | - |
  | D | 减水剂掺量 | 0.5 | 1.5 | % |
  | E | 养护温度 | 20 | 35 | °C |
  | F | 比表面积 | 350 | 420 | m²/kg |
  | G | 石膏掺量 | 3 | 6 | % |
- 实验次数: 12(11 因素 PB,空跑 4 个虚拟列控制 II 类错误)
- 中心点: 3 次重复测组内方差
- 总计: 15 次实验,GB/T 17671 标准养护测 28d 抗压

### 后续分析

- 接续能力: 跑 OLS 回归 + ANOVA + 主效应 Pareto 图(由 LLM 按 skill 清单匹配,stats_ml 合适)
- 判停: 找到 2-3 个 p < 0.05 的主效应,进入下一轮响应面 DoE(CCD)

不要直接生成具体随机表 / 实验点位 —— analyze 只规划设计类型 + 因素表,具体生成实验点位由下游(stats_ml 用 pyDOE2)跑。

反模式

  • 因素全选 + 全因子(k=10 → 1024 次实验,做不完) —— 用 PB 筛选先
  • 不留中心点(无法估实验误差,p value 全不可靠) —— 至少 3 个中心点重复
  • 设计选错:配方混料用全因子 —— 比例约束破坏全因子假设
  • 直接在 analyze 跑设计代码 —— analyze 只规划设计类型 + 因素 + 范围,生成实验表交下游
  • 输出范围超出物理可行(配方比例为负 / 温度超过设备能力)—— 因素范围写在表里时要 sanity check
  • 没标"判停条件"(跑完不知道接下来干啥) —— 每个 DoE 都要标"如果结果 X 接下一步 Y,如果 Z 回上一步"
  • 假设二阶响应面就够(强非线性体系如玻璃形成区) —— 响应面失配时要看残差,可能需要分段建模或机理模型