跳到内容

多目标优化#

通常我们不仅希望优化单个目标,而是优化多个目标。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()

在我们的示例中,我们展示了如何使用多目标和绘图的示例。