定义目标性能与约束
↓
构建候选空间
↓
收集数据库、实验和模拟数据
↓
特征工程与数据清洗
↓
训练预测模型
↓
模型评估和不确定性分析
↓
候选材料筛选
↓
实验或高精度计算验证
关键:设计流程必须闭环,而不是只停留在模型训练。
材料设计变量包括:
约束包括:
成分约束可写为:
i=1∑nci=1,0≤ci≤1
实际材料设计通常有多个目标:
可写成:
xmax[f1(x),f2(x),…,fm(x)]
此时通常不存在单一最优解,而是一组 Pareto 最优解。
一个候选材料是 Pareto 最优,表示:
若想进一步提高某一个目标,就必须牺牲至少另一个目标。
例如强度与塑性:
候选A:强度高,塑性低
候选B:强度中等,塑性中等
候选C:强度低,塑性高
工程设计需要在 Pareto 前沿上选择满足应用需求的方案。
以金属增材制造为例,常见变量:
常见目标:
数据驱动模型可帮助建立工艺窗口。
在粉末床熔化等场景中,体能量密度常被近似写为:
E=vhtP
其中:
高熵合金设计常需要考虑:
数据驱动流程:
元素集合 → 成分约束 → 描述符 → 相预测 → 性能预测 → 候选筛选 → 实验验证
适合结合主动学习和贝叶斯优化。
材料设计中,模型输出只是“建议”。
后续必须进行:
import numpy as np
import pandas as pd
P = np.linspace(100, 300, 5) # 功率 W
v = np.linspace(400, 1200, 5) # 扫描速度 mm/s
h = 0.10 # 道间距 mm
t = 0.03 # 层厚 mm
rows = []
for p in P:
for speed in v:
E = p / (speed * h * t)
rows.append({"power": p, "speed": speed, "energy_density": E})
df = pd.DataFrame(rows)
window = df[df["energy_density"].between(60, 120)]
print(window.head())
该例仅演示筛选思想,不代表真实工艺窗口。
本节重点:
下一节进入多保真数据融合:如何把实验、模拟和文献数据放到同一个框架中。
从“数据越多越好”到“数据来源与可信度可建模”。
材料数据常来自不同保真度:
高保真数据准确但少,低保真数据便宜但偏差大。
多保真融合的目标:
用低成本数据提供趋势,用高质量数据校准偏差。
保真度不是简单的“真假”,而是数据对目标真实系统的接近程度。
影响因素:
同一数据源在不同任务中保真度可能不同。
| 数据类型 | 成本 | 数量 | 偏差 | 例子 |
|---|---|---|---|---|
| 文献表格 | 低 | 中 | 中到高 | 合金强度统计 |
| 经验公式 | 低 | 高 | 中到高 | 强度经验关系 |
| 快速模拟 | 中 | 高 | 中 | CALPHAD筛选 |
| 高精度计算 | 高 | 中 | 低到中 | DFT、MD |
| 真实实验 | 高 | 低 | 低但有噪声 | 拉伸、腐蚀、显微组织 |
多保真融合需要保留数据来源字段。
若不同数据点噪声方差为 σi2,可使用反方差权重:
wi=σi21
加权均方误差为:
L=i=1∑Nwi(yi−f(xi))2
高可信数据权重大,低可信数据权重小。
这是多保真建模中最直观的处理方式。
假设低保真模型为 fL(x),高保真实验为 yH(x)。
可建立偏差校正:
yH(x)=ρfL(x)+δ(x)+ε
其中:
该思想可用于模拟数据向实验数据校准。
多保真高斯过程可将低保真趋势和高保真观测联合建模。
简化形式:
fH(x)=ρfL(x)+fδ(x)
其中 fL(x) 和 fδ(x) 可分别建模为高斯过程。
直观理解:
以焊接或增材制造为例:
工艺参数 → 有限元/CFD模拟特征 → 组织实验标签 → 性能模型
模拟特征可作为机器学习输入,而不是替代实验。
文献数据常见问题:
建议:
如果同一材料的低保真和高保真记录被错误分到训练集和测试集,可能导致评估偏高。
防止方法:
一种实用做法:把数据来源作为模型输入或分组变量。
features = [composition, process, descriptors, source_type]
source_type = experiment / DFT / CALPHAD / literature
好处:
注意:来源特征不能替代物理特征。
import numpy as np
from sklearn.linear_model import LinearRegression
# 低保真模拟结果与高保真实验结果
x = np.array([[0.1], [0.2], [0.3], [0.4], [0.5]])
y_low = np.array([100, 130, 160, 190, 220])
y_high = np.array([115, 138, 171, 205, 226])
# 学习 y_high = rho * y_low + b
model = LinearRegression()
model.fit(y_low.reshape(-1, 1), y_high)
rho = model.coef_[0]
bias = model.intercept_
print("rho=", rho, "bias=", bias)
new_low = np.array([[250]])
print("校准预测=", model.predict(new_low))
这是最简单的多保真校准示例。
import numpy as np
from sklearn.linear_model import Ridge
X = np.array([
[0.1, 700], [0.2, 720], [0.3, 740],
[0.1, 700], [0.2, 720]
])
y = np.array([400, 430, 455, 410, 438])
# 假设前三条来自低保真模拟,后两条来自高保真实验
weights = np.array([0.3, 0.3, 0.3, 1.0, 1.0])
model = Ridge(alpha=1.0)
model.fit(X, y, sample_weight=weights)
print(model.predict([[0.25, 730]]))
权重应来自误差估计、专家判断或验证集校准。
不能只看整体误差,应分来源评价:
| 评价对象 | 指标 |
|---|---|
| 高保真测试集 | MAE、RMSE、R2 |
| 低保真趋势 | 相关系数、排序准确性 |
| 外推候选 | 不确定性、物理合理性 |
| 数据源偏差 | 残差分布、系统误差 |
关键问题:
模型是否真正提高了对高保真目标的预测能力?
可给每条数据设置可靠性等级:
| 等级 | 数据来源 | 处理策略 |
|---|---|---|
| A | 原始实验数据,元数据完整 | 高权重,可用于测试 |
| B | 高质量计算或重复实验 | 中高权重 |
| C | 文献表格或标准数据库 | 中等权重 |
| D | 图像提取、条件不完整 | 低权重或仅趋势参考 |
可靠性等级应写入数据表,而不是只存在研究者脑中。
在材料优化中,可根据成本选择下一次采样:
可定义单位成本收益:
αc(x)=c(x)α(x)
其中 α(x) 是采集函数,c(x) 是采样成本。
这连接了第8章的贝叶斯优化。
文献与数据库 → 初始低保真候选池
↓
快速模拟 → 低成本趋势判断
↓
机器学习 / 贝叶斯优化 → 选择候选
↓
高保真实验或精细计算 → 验证
↓
误差校准与模型更新
↓
下一轮设计
闭环的关键是:每一轮都能记录、学习并修正偏差。
目标:设计耐蚀合金。
数据来源:
建模目标:
腐蚀速率=f(成分,相组成,介质,工艺)
1. 建立样品ID和文献ID
2. 统一成分、介质、温度和腐蚀速率单位
3. 为数据源设置可靠性等级
4. 计算成分描述符和相组成描述符
5. 训练加权回归或多保真模型
6. 输出候选合金并给出不确定性
7. 选择少量候选进行实验验证
8. 将验证结果回写数据库
该流程体现第2、4、7、8、9章内容的综合应用。
本节重点:
第9章完成了从数据基础设施到材料设计的衔接:
| 概念 | 一句话理解 |
|---|---|
| 数据湖 | 保存多类型原始数据和中间数据的存储体系 |
| Spark | 面向大数据的分布式分析引擎 |
| NoSQL | 面向非传统表格数据的数据库类型集合 |
| 材料数据库 | 可查询的材料结构、性质和来源集合 |
| 高通量计算 | 自动化批量计算候选材料性质 |
| 高通量实验 | 自动化批量制备和表征材料样品 |
| 材料基因工程 | 数据、计算、实验和模型协同加速材料发现 |
| 多保真融合 | 融合不同精度和成本的数据源 |
任务目标:
构造一个简化材料候选数据库,并完成稳定性、带隙、成本和多保真校准分析。
数据字段建议:
material_id, formula, band_gap, e_hull, density,
cost, low_fidelity_strength, high_fidelity_strength
要求:
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
np.random.seed(0)
N = 30
df = pd.DataFrame({
"material_id": [f"M{i:03d}" for i in range(N)],
"band_gap": np.random.uniform(0, 4, N),
"e_hull": np.random.uniform(0, 0.15, N),
"density": np.random.uniform(2, 9, N),
"cost": np.random.uniform(10, 200, N),
"low_strength": np.random.uniform(200, 900, N)
})
df["high_strength"] = 1.08 * df["low_strength"] + np.random.normal(0, 35, N)
model = LinearRegression().fit(df[["low_strength"]], df["high_strength"])
df["calibrated_strength"] = model.predict(df[["low_strength"]])
selected = df[
(df["band_gap"].between(1.5, 3.5)) &
(df["e_hull"] < 0.05) &
(df["density"] < 7.5) &
(df["cost"] < 120)
].sort_values("calibrated_strength", ascending=False)
print(selected.head(5))
完成基础任务后,可继续扩展:
source_type 字段,区分实验、DFT、文献数据。下一章:可信AI、数据安全与综合应用
数据平台的最终价值不在于存储更多文件,而在于让材料研发过程更可追溯、更可复用、更可优化。