多目标优化#
通常我们不仅希望优化单个目标,而是优化多个目标。SMAC 提供了一个多目标优化接口来做到这一点。目前,用于此的算法是均值聚合策略或 ParEGO [Know06]。在这两种情况下,多个目标被聚合成一个单一的标量目标,然后由 SMAC 进行优化。然而,运行历史仍然保留了原始目标。
基本方法如下:
- 在场景对象中将目标指定为列表。例如,
Scenario(objectives=["obj1", "obj2"])
。 - 确保您的目标函数返回一个成本*字典*,其中包含目标名称作为键,目标值作为值,例如
{'obj1': 0.3, 'obj2': 200}
。或者,您也可以简单地返回一个列表,例如[0.3, 200]
。 - 现在您可以选择性地将自定义多目标算法类传递给 SMAC 外观(通过
multi_objective_algorithm
)。在所有外观中,默认的多目标算法都是均值聚合策略。
警告
多目标算法影响接下来采样哪些配置。更具体地说,由于只训练了一个代理模型,多个目标必须被标量化为一个单一目标。这个标量化值用于训练代理模型,然后获取函数/最大化器使用该模型来采样下一个配置。
您可以直接接收优化过程后的最优配置(Pareto 前沿上的点)。或者,您可以使用强化器中的 get_incumbents
方法。
smac = ...
incumbents = smac.optimize()
# Or you use the intensifier
incumbents = smac.intensifier.get_incumbents()
在我们的示例中,我们展示了如何使用多目标和绘图的示例。