3. 双目标DOE的因子水平编码与试验设计表生成

四个因子的水平编码

本例的配方场景沿用前两例已确定的因子范围:增韧剂含量(A)、稀释剂含量(B)、固化温度(C)、促进剂用量(D)。响应曲面设计需要把物理量换算成无量纲编码值,中心点记为 0,低水平记为 −1,高水平记为 +1,星点(轴向点)记为 ±α。编码公式为:

x = (X − X₀) / (ΔX),其中 X₀ 为水平中心值,ΔX 为半区间(高水平与低水平之差的一半)。

因子物理量低水平 (−1)中心 (0)高水平 (+1)ΔX单位
A增韧剂含量812164phr
B稀释剂含量3693phr
C固化温度608010020°C
D促进剂用量0.51.01.50.5phr

取 α = 2 的可旋转中心复合设计(CCD),每个因子有 5 个水平:−2、−1、0、+1、+2。星点对应的物理量为 X₀ ± 2ΔX,例如增韧剂含量星点为 4 phr 与 20 phr,稀释剂为 0 phr 与 12 phr,固化温度为 40 °C 与 120 °C,促进剂为 0 phr 与 2.0 phr。

24 run 中心复合设计的结构

标准 CCD 由三部分组成:2⁴ = 16 个析因点(立方点,编码值取 ±1)、8 个星点(轴向点,每个因子各取 ±α,其余因子为 0)、以及若干中心点。16 + 8 = 24,正好满足 24 run 的要求,因此本例采用零中心点的 CCD 配置。若需要估计纯误差,可把部分析因点替换为中心点,但会损失部分高阶交互信息,本例优先保证设计表规模与可执行性。

24 run 中心复合设计(CCD, α=2)结构分解 析因点(立方点) 16 run 编码值取 ±1 A: 8 / 16 phr B: 3 / 9 phr C: 60 / 100 °C D: 0.5 / 1.5 phr 星点(轴向点) 8 run 编码值取 ±2 A: 4 / 20 phr B: 0 / 12 phr C: 40 / 120 °C D: 0 / 2.0 phr 中心点 0 run(本例) 编码值全为 0 A: 12 phr B: 6 phr C: 80 °C D: 1.0 phr 16 + 8 + 0 = 24 run 可估计:4 个主效应 + 6 个二阶交互 + 4 个二次项 设计点可执行性检查 ✓ 稀释剂星点 0 phr:需确认无稀释剂时体系可搅拌涂布 ✓ 促进剂星点 0 phr:需确认无促进剂时 40 °C 可凝胶 ✓ 固化温度 120 °C:确认烘箱上限与基材耐温

生成 24 run 设计表

下表按“析因点 → 星点”顺序列出编码值,物理量由编码公式反算:X = X₀ + x·ΔX。表中同时给出物理配方,便于直接称量配料。

Run类型A 编码B 编码C 编码D 编码A (phr)B (phr)C (°C)D (phr)
1析因−1−1−1−183600.5
2析因+1−1−1−1163600.5
3析因−1+1−1−189600.5
4析因+1+1−1−1169600.5
5析因−1−1+1−1831000.5
6析因+1−1+1−11631000.5
7析因−1+1+1−1891000.5
8析因+1+1+1−11691000.5
9析因−1−1−1+183601.5
10析因+1−1−1+1163601.5
11析因−1+1−1+189601.5
12析因+1+1−1+1169601.5
13析因−1−1+1+1831001.5
14析因+1−1+1+11631001.5
15析因−1+1+1+1891001.5
16析因+1+1+1+11691001.5
17星点−200046801.0
18星点+2000206801.0
19星点0−200120801.0
20星点0+2001212801.0
21星点00−20126401.0
22星点00+201261201.0
23星点000−2126800
24星点000+2126802.0

设计点可执行性检查

编码表生成后必须逐点核对物理可行性,否则会出现“设计上合法、实验上做不出来”的点。本例需要重点确认以下四项:

  • 稀释剂 0 phr(Run 19):无稀释剂时体系黏度可能过高,需确认能否在 80 °C 下搅拌并浇注。若不可行,应把稀释剂下限从 3 phr 上调,或改用 α 较小的设计。
  • 促进剂 0 phr(Run 23):无促进剂时 80 °C 是否能在合理时间内凝胶,需做一次预试验确认,否则该点响应可能无法测量。
  • 固化温度 120 °C(Run 22):确认烘箱控温上限与模具/基材耐温,避免超温导致试样报废。
  • 增韧剂 20 phr(Run 18):高增韧剂含量下混合均匀性与黏度是否仍在可操作范围,需确认搅拌设备扭矩余量。
若上述任一星点不可执行,优先考虑把 α 从 2 降到 1.414(面心或可旋转折中),或把该因子的物理范围收窄后重新编码,而不是直接删除该 run——删除会破坏 CCD 的正交性与可旋转性。

用代码生成并校验设计表

下面用 Python 生成编码矩阵、反算物理量,并做基本校验(析因点数量、星点数量、编码值范围、物理量是否落在设定区间内)。代码自包含,可直接运行。

import itertools
import numpy as np

# 因子定义:名称, 中心值, 半区间, 单位
factors = [
    ("A_增韧剂", 12.0, 4.0, "phr"),
    ("B_稀释剂", 6.0, 3.0, "phr"),
    ("C_固化温度", 80.0, 20.0, "°C"),
    ("D_促进剂", 1.0, 0.5, "phr"),
]
alpha = 2.0

# 1) 析因点:2^4 全因子,编码 ±1
factorial = list(itertools.product([-1, 1], repeat=4))

# 2) 星点:每个因子 ±alpha,其余为 0
star = []
for i in range(4):
    for s in (-alpha, alpha):
        row = [0.0] * 4
        row[i] = s
        star.append(tuple(row))

# 3) 合并
coded = factorial + star
assert len(coded) == 24, f"run 数应为 24,实际 {len(coded)}"

# 4) 反算物理量
def decode(row):
    return [c + x * d for (_, c, d, _), x in zip(factors, row)]

physical = np.array([decode(r) for r in coded])

# 5) 校验:析因点 16 个、星点 8 个
n_fact = sum(1 for r in coded if all(abs(v) == 1 for v in r))
n_star = sum(1 for r in coded if sum(abs(v) for v in r) == alpha)
print(f"析因点 {n_fact} 个,星点 {n_star} 个,合计 {len(coded)} run")

# 6) 校验:物理量是否落在 [中心-2*半区间, 中心+2*半区间]
for j, (name, c, d, unit) in enumerate(factors):
    lo, hi = physical[:, j].min(), physical[:, j].max()
    print(f"{name}: {lo:.2f} ~ {hi:.2f} {unit}")

# 7) 输出设计表
header = ["Run", "A", "B", "C", "D", "A_phr", "B_phr", "C_C", "D_phr"]
print(",".join(header))
for i, (cr, pr) in enumerate(zip(coded, physical), start=1):
    print(f"{i}," + ",".join(f"{v:+.0f}" for v in cr) + "," +
          ",".join(f"{v:.1f}" for v in pr))

运行后应看到:析因点 16 个、星点 8 个、合计 24 run;四个因子的物理量范围分别为 4–20 phr、0–12 phr、40–120 °C、0–2.0 phr,与编码表一致。若某因子范围与预期不符,说明中心值或半区间录入有误,应先修正再进入试验。

本例采用零中心点 CCD,虽然满足 24 run 的规模要求,但缺少中心点重复,无法独立估计纯误差,后续方差分析时需依赖高阶交互项或重复测量来构造误差项。若条件允许,建议把 2–3 个析因点替换为中心点重复,以提升模型检验能力。