候选点必须满足约束。
import numpy as np
rng = np.random.default_rng(0)
N = 5000
X_pool = np.column_stack([
rng.uniform(15, 22, N), # Cr wt.%
rng.uniform(6, 14, N), # Ni wt.%
rng.uniform(0.05, 0.40, N), # N wt.%
rng.uniform(150, 350, N), # P W
rng.uniform(300, 1200, N), # v mm/s
rng.uniform(20, 60, N) # h micrometer
])
实际研究中还需加入相图、设备、成形质量等可行性约束。
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import Matern, ConstantKernel
kernel = ConstantKernel(1.0) * Matern(length_scale=np.ones(X_train.shape[1]), nu=2.5)
gp = GaussianProcessRegressor(kernel=kernel, alpha=1e-4, normalize_y=True)
gp.fit(X_train, y_train)
mu, std = gp.predict(X_pool, return_std=True)
ucb = mu + 1.96 * std
best_idx = np.argmax(ucb)
print("推荐实验点:", X_pool[best_idx])
print("预测均值:", mu[best_idx], "预测标准差:", std[best_idx])
优化推荐点不一定可制备。
可行性过滤包括:
可写为:
Xvalid={x∈X∣gj(x)≤0,j=1,…,m}
若同时优化强度和延伸率:
xmax[σy(x),δ(x)]
可采用:
课堂教学可先使用加权和,再引入 Pareto 思想。
材料研发中数据来源保真度不同。
| 数据源 | 成本 | 保真度 | 示例 |
|---|---|---|---|
| 经验公式 | 低 | 低 | Schaeffler 图谱估计相组成 |
| CALPHAD | 中 | 中 | 平衡相分数、Scheil 凝固 |
| 有限元/相场 | 高 | 中高 | 温度场、组织演化 |
| 实验 | 最高 | 高 | 显微组织、力学性能 |
多保真优化目标:用低成本数据缩小搜索区域,用高保真数据验证关键点。
优化结果不应只给一个“最优点”。
建议输出:
计算—实验—模型—反馈。
目标定义
↓
候选设计生成
↓
模型预测与不确定性评估
↓
采集函数选择下一批样本
↓
自动化计算或实验
↓
数据入库与质量控制
↓
模型更新
↓
下一轮迭代
闭环研发的核心不是“自动跑实验”,而是“每轮数据都能改善下一轮决策”。
计算闭环更容易实现,可作为课程项目起点。
组成:
优势:
实验闭环需要更多工程条件:
材料实验闭环比纯软件代理更复杂,因为设备、安全、样品制备和误差控制都不可忽略。
模型不是闭环的终点,而是决策部件。
| 环节 | 模型作用 |
|---|---|
| 候选生成 | 过滤明显不可行设计 |
| 性能预测 | 估计目标值 |
| 不确定性评估 | 判断知识盲区 |
| 采集函数 | 选择下一轮样本 |
| 数据质控 | 识别异常结果 |
| 机理解释 | 辅助判断规律是否物理合理 |
模型必须随新数据持续更新。
闭环系统必须记录元数据。
| 数据类型 | 应记录内容 |
|---|---|
| 成分数据 | nominal composition、measured composition、单位 |
| 工艺数据 | 设备、参数、时间、环境 |
| 表征数据 | 仪器、倍率、区域、图像处理方法 |
| 性能数据 | 测试标准、试样尺寸、重复次数 |
| 模型数据 | 模型版本、训练集、超参数、指标 |
| 优化数据 | 采集函数、候选池、推荐理由 |
没有元数据,闭环结果难以复现。
需要人工审核的环节:
闭环何时停止?
常见准则:
可写为:
Δft=fbest,t−fbest,t−1
若连续 r 轮满足 Δft<ϵ,可停止优化。
可靠性评价不仅看最终性能,还看过程质量。
for round_id in range(max_rounds):
# 1. 训练或更新代理模型
model.fit(X_train, y_train)
# 2. 在候选池上预测均值和不确定性
mu, std = model.predict(X_pool, return_std=True)
# 3. 计算采集函数
acquisition = mu + kappa * std
# 4. 可行性过滤
acquisition[~valid_mask] = -np.inf
# 5. 选择下一批样本
selected = np.argsort(acquisition)[-batch_size:]
X_next = X_pool[selected]
# 6. 执行实验或计算,并加入数据库
y_next = run_experiment_or_simulation(X_next)
X_train, y_train = update_dataset(X_train, y_train, X_next, y_next)
可分三阶段推进:
建议教学从离线闭环开始:
| 概念 | 核心问题 | 典型输出 |
|---|---|---|
| AI代理 | 下一步该执行什么动作? | 工具调用、计划、报告 |
| 主动学习 | 下一批标注或实验样本选哪些? | 最有信息量的样本 |
| 贝叶斯优化 | 下一次评估哪里更可能找到更优解? | 最有希望改进目标的点 |
| 自动化闭环 | 如何持续迭代改进? | 计算—实验—模型—反馈流程 |
三者结合后,材料研发从“经验试错”逐步走向“数据驱动的序贯决策”。
任务:构造一个简化的“材料性能函数”,模拟有限实验预算下的序贯优化。
要求:
f(x1,x2)=sin(3x1)+cos(4x2)−0.2(x1−1)2−0.1(x2+1)2
1. 生成候选池 X_pool
2. 随机选取初始样本 X_train, y_train
3. for 每一轮:
训练 GaussianProcessRegressor
预测候选池的 mu 和 std
计算 UCB = mu + kappa * std
选择 UCB 最大的点
计算真实函数值并加入训练集
记录当前 best_y
4. 绘制 best_y 与迭代轮数的关系
扩展:
课堂建议:先用 scikit-learn 写清楚原理,再逐步引入 BoTorch 等工程化工具。
目标:降低孔隙率并提高熔深稳定性。
变量:电流 I、电压 U、焊接速度 v、保护气流量 Q。
可构造目标:
f(x)=−ϕp(x)−λ∣d(x)−d0∣
其中 ϕp 为孔隙率,d 为熔深,d0 为目标熔深。
推荐流程:先用有限元或 Fluent 结果构建代理模型,再少量实验校正。
目标:获得高硬度且保留足够韧性。
变量:固溶温度、固溶时间、时效温度、时效时间。
可设多目标:
xmax[H(x),KIC(x)]
或者约束优化:
xmaxH(x),s.t.KIC(x)≥K0
适合用贝叶斯优化减少热处理实验次数。
目标:减少人工标注显微组织图像成本。
流程:
优势:优先标注“模型最困惑”的图像,而不是随机标注大量重复图像。
低保真数据:CALPHAD 预测相分数和相变温度。
高保真数据:实验测得组织和性能。
思路:
请完成本章 Python 编程作业:主动学习与贝叶斯优化演示。