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. 参数#

表 8.1 参数#

参数

类型

默认值

描述

dataset_path

str

必需

数据集 CSV 文件路径

VS_path

str

必需

虚拟空间 CSV 文件路径

object_num

int

必需

要优化的目标数量

max_search

bool

True

是否最大化(True)或最小化(False)

method

str

‘EHVI’

优化方法:‘EHVI’, ‘qNEHVI’, ‘PI’, ‘UCB’

assign_model

str/bool

False

代理模型或 False 表示自动选择

bootstrap

int

5

自举迭代次数

8.6.1.2. 返回值#

表 8.2 返回值#

变量

类型

描述

VS_recommended

array

从虚拟空间推荐的数据点

improvements

array

每个目标的计算改进

index

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. 常见问题#

  1. 收敛问题

    • 增加自举迭代次数

    • 尝试不同的代理模型

    • 检查数据质量和缩放

  2. 较差的推荐

    • 确保有足够的训练数据

    • 验证目标定义(最大化 vs. 最小化)

    • 考虑数据预处理

  3. 计算问题

    • 减少自举迭代次数

    • 使用更简单的代理模型

    • 减小虚拟空间大小

8.12.2. 性能提示#

  • 数据大小:保持虚拟空间可管理(<10,000 点)

  • 目标:EHVI 最适合 2-4 个目标

  • 特征:将特征归一化到相似的尺度

  • 迭代:从较少的自举迭代开始测试

8.13. 下一步#