8. MultiBgolearn:多目标贝叶斯全局优化#
备注
MultiBgolearn 扩展了 Bgolearn 以处理多目标优化问题,能够在材料设计中同时优化多个竞争目标。
8.1. 概述#
MultiBgolearn 是一个专为多目标贝叶斯全局优化(MOBO)设计的 Python 包,专门针对材料设计。它通过支持多个材料性能的同时优化来扩展 Bgolearn 包的功能,使其非常适合需要在竞争目标之间进行权衡的实际应用。
为什么需要多目标优化?
在材料设计中,我们经常需要同时优化多个性能:
强度 vs. 延展性:更强的材料通常更脆
性能 vs. 成本:更好的性能通常伴随更高的成本
导电性 vs. 热稳定性:高导电性材料可能热不稳定
耐腐蚀性 vs. 机械性能:防腐处理可能影响强度
MultiBgolearn 帮助找到这些竞争目标之间的最优权衡。
8.2. 主要特性#
8.2.1. 多种 MOBO 算法#
期望超体积提升 (EHVI):最大化目标空间的体积
q-噪声期望超体积提升 (qNEHVI):qNEHVI 扩展 EHVI 以处理噪声观测和批量采集
改进概率 (PI):关注改进概率
上置信界 (UCB):平衡探索和利用
8.2.2. 面向材料的设计#
同时优化多个材料性能
灵活的目标处理(最大化/最小化)
自举不确定性量化
自动模型选择
8.2.3. 灵活的代理模型#
RandomForest
GradientBoosting
支持向量回归 (SVR)
高斯过程
自动模型选择
8.3. 安装#
使用 pip 安装 MultiBgolearn:
pip install MultiBgolearn
或同时安装两个包:
pip install Bgolearn MultiBgolearn
8.4. 快速开始#
这是使用 MultiBgolearn 进行材料优化的简单示例:
from MultiBgolearn import bgo
# Define your dataset and virtual space paths
dataset_path = './data/dataset.csv'
VS_path = './virtual_space/'
# Set the number of objectives (e.g., 3 for three-objective optimization)
object_num = 3
# Apply Multi-Objective Bayesian Global Optimization
VS_recommended, improvements, index = bgo.fit(
dataset_path,
VS_path,
object_num,
max_search=True,
method='EHVI',
assign_model='GaussianProcess',
bootstrap=5
)
print(f"Recommended sample index: {index}")
print(f"Expected improvements: {improvements}")
8.5. 数据格式#
8.5.1. 数据集格式#
您的数据集应该是具有以下结构的 CSV 文件:
feature1,feature2,feature3,objective1,objective2,objective3
1.2,3.4,5.6,100.5,0.85,7.2
2.1,4.3,6.5,95.2,0.92,6.8
...
特征:输入变量(成分、加工条件等)
目标:要优化的目标性能(强度、延展性、成本等)
8.5.2. 虚拟空间格式#
虚拟空间包含用于优化的候选点:
feature1,feature2,feature3
1.5,3.2,5.8
2.3,4.1,6.2
...
8.6. API 参考#
8.6.1. 主函数:bgo.fit()#
bgo.fit(dataset_path, VS_path, object_num, max_search=True,
method='EHVI', assign_model=False, bootstrap=5)
8.6.1.1. 参数#
参数 |
类型 |
默认值 |
描述 |
|---|---|---|---|
|
str |
必需 |
数据集 CSV 文件路径 |
|
str |
必需 |
虚拟空间 CSV 文件路径 |
|
int |
必需 |
要优化的目标数量 |
|
bool |
True |
是否最大化(True)或最小化(False) |
|
str |
‘EHVI’ |
优化方法:‘EHVI’, ‘qNEHVI’, ‘PI’, ‘UCB’ |
|
str/bool |
False |
代理模型或 False 表示自动选择 |
|
int |
5 |
自举迭代次数 |
8.6.1.2. 返回值#
变量 |
类型 |
描述 |
|---|---|---|
|
array |
从虚拟空间推荐的数据点 |
|
array |
每个目标的计算改进 |
|
int |
虚拟空间中推荐点的索引 |
8.7. 优化方法#
8.7.1. 期望超体积提升 (EHVI)#
EHVI 专注于最大化解所支配的目标空间的体积。它对于 2-4 个目标的问题特别有效。
# Use EHVI for balanced multi-objective optimization
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=3,
method='EHVI',
assign_model='GaussianProcess'
)
最适合:
2-4 个目标
帕累托前沿的平衡探索
当您想要最大化支配体积时
8.7.2. q-噪声期望超体积提升 (qNEHVI)#
qNEHVI 扩展 EHVI 以处理噪声观测和批量采集,使其适用于具有测量不确定性和并行实验的实际场景。
# Use qNEHVI for balanced multi-objective optimization
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=3,
method='qNEHVI',
batch_size=3, # Select 3 points simultaneously
assign_model='GaussianProcess'
)
最适合:
测量具有显著的观测噪声或不确定性
可以并行进行多个实验
已知或可估计的观测噪声水平
8.7.3. 改进概率 (PI)#
PI 选择相对于已知最佳解具有最高改进概率的点。
# Use PI for improvement-focused optimization
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=2,
method='PI',
assign_model='RandomForest'
)
最适合:
保守优化
当改进概率很重要时
以利用为重点的搜索
8.7.4. 上置信界 (UCB)#
UCB 探索具有最高上置信界的点,平衡探索和利用。
# Use UCB for exploration-exploitation balance
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=3,
method='UCB',
assign_model='GradientBoosting'
)
最适合:
有噪声的目标
当不确定性很重要时
平衡探索-利用
8.8. 代理模型#
8.8.1. 自动模型选择#
当 assign_model=False 时,MultiBgolearn 自动选择最佳模型:
# Automatic model selection
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=3,
assign_model=False # Auto-select best model
)
8.8.2. 手动模型选择#
您可以显式指定代理模型:
# Available models
models = [
'RandomForest',
'GradientBoosting',
'SVR',
'GaussianProcess'
]
# Use specific model
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=3,
assign_model='GaussianProcess'
)
8.9. 自举不确定性量化#
MultiBgolearn 使用自举采样来量化预测中的不确定性:
# Increase bootstrap iterations for better uncertainty estimation
VS_recommended, improvements, index = bgo.fit(
dataset_path, VS_path, object_num=3,
bootstrap=10 # More iterations = better uncertainty estimation
)
自举的好处:
稳健的不确定性量化
更好地处理噪声数据
提高模型可靠性
更有信心的推荐
8.10. 实际示例:合金设计#
让我们优化一个三目标合金设计问题:
import pandas as pd
from MultiBgolearn import bgo
# Prepare data
# Dataset: composition features + 3 objectives (strength, ductility, cost)
dataset = pd.DataFrame({
'Cu': [2.0, 3.5, 1.8, 4.2],
'Mg': [1.2, 0.8, 1.5, 0.9],
'Si': [0.5, 0.7, 0.3, 0.8],
'Strength': [250, 280, 240, 290], # Maximize
'Ductility': [15, 12, 18, 10], # Maximize
'Cost': [100, 120, 95, 130] # Minimize (convert to maximize: -Cost)
})
# Convert cost to maximization problem
dataset['Cost'] = -dataset['Cost']
# Save dataset
dataset.to_csv('alloy_dataset.csv', index=False)
# Create virtual space (candidate compositions)
virtual_space = pd.DataFrame({
'Cu': [2.5, 3.0, 3.8, 2.2, 4.0],
'Mg': [1.0, 1.3, 0.9, 1.4, 1.1],
'Si': [0.6, 0.4, 0.8, 0.5, 0.7]
})
virtual_space.to_csv('virtual_space.csv', index=False)
# Multi-objective optimization
VS_recommended, improvements, index = bgo.fit(
'alloy_dataset.csv',
'virtual_space.csv',
object_num=3,
max_search=True,
method='EHVI',
assign_model='GaussianProcess',
bootstrap=5
)
print(f"Recommended alloy composition:")
print(f"Cu: {VS_recommended[0]:.2f}%")
print(f"Mg: {VS_recommended[1]:.2f}%")
print(f"Si: {VS_recommended[2]:.2f}%")
print(f"Expected improvements: {improvements}")
8.11. 最佳实践#
8.11.1. 1. 数据准备#
确保每个目标有足够的训练数据(>10 个样本)
如果目标具有不同的尺度,则归一化目标
适当处理缺失值
8.11.2. 2. 方法选择#
对于 2-4 个目标的平衡探索使用 EHVI
对于具有显著观测噪声或不确定性的测量使用 qNEHVI
对于保守的、以改进为重点的搜索使用 PI
对于有噪声的目标或探索需求使用 UCB
8.11.3. 3. 模型选择#
从自动模型选择开始
对于平滑、连续的目标使用 GaussianProcess
对于离散或分类特征使用 RandomForest
对于复杂的非线性关系使用 GradientBoosting
8.11.4. 4. 自举设置#
对于大多数问题使用 5-10 次自举迭代
对于非常嘈杂的数据增加到 20+ 次
平衡计算时间与不确定性质量
8.12. 故障排除#
8.12.1. 常见问题#
收敛问题
增加自举迭代次数
尝试不同的代理模型
检查数据质量和缩放
较差的推荐
确保有足够的训练数据
验证目标定义(最大化 vs. 最小化)
考虑数据预处理
计算问题
减少自举迭代次数
使用更简单的代理模型
减小虚拟空间大小
8.12.2. 性能提示#
数据大小:保持虚拟空间可管理(<10,000 点)
目标:EHVI 最适合 2-4 个目标
特征:将特征归一化到相似的尺度
迭代:从较少的自举迭代开始测试
8.13. 下一步#
了解 多目标优化概念 的理论背景
探索 MultiBgolearn 中的 MOBO 算法 的算法细节
尝试 多目标优化示例 进行实践练习
理解 帕累托优化和权衡分析 进行权衡分析