快速开始¶
本教程帮助您使用OpenBox运行您的第一个示例。
空间定义¶
首先,定义一个搜索空间。
from openbox import space as sp
# Define Search Space
space = sp.Space()
x1 = sp.Real("x1", -5, 10, default_value=0)
x2 = sp.Real("x2", 0, 15, default_value=0)
space.add_variables([x1, x2])
在这个例子中,我们创建了一个空的搜索空间,然后向其中添加了两个实数(浮点数)变量。
第一个变量 x1 的范围是从 -5 到 10,第二个变量 x2 的范围是从 0 到 15。
OpenBox 还支持其他类型的变量。
以下是如何定义 Int 和 Categorical 变量的示例:
from openbox import space as sp
i = sp.Int("i", 0, 100)
kernel = sp.Categorical("kernel", ["rbf", "poly", "sigmoid"], default_value="rbf")
对于高级用法,请参考复杂搜索空间的问题定义。
OpenBox 中的 space 是基于 ConfigSpace 包实现的。 更多用法,请参考 ConfigSpace 的文档。
目标定义¶
其次,定义要优化的目标函数。 请注意,OpenBox 旨在 最小化 目标函数。 这里我们提供了一个 Branin 函数的示例。
import numpy as np
# Define Objective Function
def branin(config):
x1, x2 = config['x1'], config['x2']
y = (x2-5.1/(4*np.pi**2)*x1**2+5/np.pi*x1-6)**2+10*(1-1/(8*np.pi))*np.cos(x1)+10
return {'objectives': [y]}
目标函数将来自space的配置作为输入,并输出目标值。
优化¶
在定义了搜索空间和目标函数之后,我们可以按照以下方式运行优化过程:
from openbox import Optimizer
# Run
opt = Optimizer(
branin,
space,
max_runs=50,
surrogate_type='gp', # try using 'auto'!
task_id='quick_start',
# Have a try on the new HTML visualization feature!
# visualization='advanced', # or 'basic'. For 'advanced', run 'pip install "openbox[extra]"' first
# auto_open_html=True, # open the visualization page in your browser automatically
)
history = opt.run()
在这里我们创建了一个Optimizer实例,并将目标函数branin和搜索空间space传递给它。其他参数包括:
num_objectives=1和num_constraints=0表示我们的 branin 函数返回一个没有约束的单一值。max_runs=50表示优化将进行50轮(优化目标函数50次)。surrogate_type='gp'. 对于数学问题,我们建议使用高斯过程('gp')作为贝叶斯代理模型。对于超参数优化(HPO)等实际问题,我们建议使用随机森林('prf')。设置为'auto'以启用自动算法选择。task_id用于标识优化过程。visualization:'none','basic'或'advanced'. 参见 HTML Visualization.auto_open_html: 是否自动在浏览器中打开可视化页面。 参见 HTML Visualization。
然后,调用opt.run()以启动优化过程。
可视化¶
优化后,opt.run() 返回优化历史。
调用 print(history) 查看结果:
print(history)
+-------------------------+-------------------+
| Parameters | Optimal Value |
+-------------------------+-------------------+
| x1 | -3.138277 |
| x2 | 12.254526 |
+-------------------------+-------------------+
| Optimal Objective Value | 0.398096578033325 |
+-------------------------+-------------------+
| Num Configs | 50 |
+-------------------------+-------------------+
调用 history.plot_convergence() 来可视化优化过程:
import matplotlib.pyplot as plt
history.plot_convergence(true_minimum=0.397887)
plt.show()
调用 print(history.get_importance()) 来打印参数重要性:
(请注意,您需要安装 pyrfr 包才能使用此功能。
Pyrfr Installation Guide
print(history.get_importance())
+------------+------------+
| Parameters | Importance |
+------------+------------+
| x1 | 0.488244 |
| x2 | 0.327570 |
+------------+------------+
(新功能!)
调用 history.visualize_html() 在HTML页面中可视化优化过程。
对于 show_importance 和 verify_surrogate,首先运行 pip install "openbox[extra]"。
详情请参见 HTML Visualization。
history.visualize_html(open_html=True, show_importance=True,
verify_surrogate=True, optimizer=opt)