plot_pareto_front

optuna.visualization.plot_pareto_front(study, *, target_names=None, include_dominated_trials=True, axis_order=None, constraints_func=None, targets=None)[源码]

绘制研究的 Pareto 前沿。

另请参阅

请参考 使用 Optuna 进行多目标优化 中的 Pareto 前沿可视化教程。

参数:
  • study (Study) – 一个 Study 对象,其 trial 将根据目标值进行绘制。当 targetsNone 时,目标的数量必须是 2 或 3。

  • target_names (list[str] | None) – 用作轴标题的目标名称列表。如果指定 None,则使用“Objective {objective_index}”代替。如果为不包含任何已完成 trial 的 study 指定了 targets,则必须指定 target_name

  • include_dominated_trials (bool) – 一个包含所有被支配 trial 的目标值的标志。

  • axis_order (list[int] | None) –

    指示轴顺序的索引列表。如果指定 None,则使用默认顺序。axis_ordertargets 不能同时使用。

    警告

    v3.0.0 中已弃用。此功能将在未来版本中移除。此功能移除的计划时间为 v5.0.0,但此计划可能会更改。请参阅 https://github.com/optuna/optuna/releases/tag/v3.0.0

  • constraints_func (Callable[[FrozenTrial], Sequence[float]] | None) –

    一个可选函数,用于计算目标约束。它必须接受一个 FrozenTrial 并返回约束。返回值必须是 float 类型的序列。严格大于 0 的值表示约束被违反。等于或小于 0 的值被视为可行的。此规范与 NSGAIISampler 等相同。

    如果提供了此参数,则 trial 将分为三类:可行的且最优的、可行的但非最优的、以及不可行的。类别将以不同的颜色显示。在此,“最优”(在 Pareto 前沿上)的判断将忽略所有不可行的 trial。

    警告

    在 v4.0.0 中已弃用。此功能将在未来版本中移除。此功能当前的移除计划是 v6.0.0,但此计划可能会更改。请参阅 https://github.com/optuna/optuna/releases/tag/v4.0.0

  • targets (Callable[[FrozenTrial], Sequence[float]] | None) –

    一个返回目标值的函数,用于显示。此函数的参数为 FrozenTrialaxis_ordertargets 不能同时使用。如果 study.n_objectives 既不是 2 也不是 3,则必须指定 targets

    注意

    在 v3.0.0 中作为实验性功能添加。接口在后续版本中可能在没有事先通知的情况下发生更改。请参阅 https://github.com/optuna/optuna/releases/tag/v3.0.0

返回:

一个 plotly.graph_objects.Figure 对象。

返回类型:

Figure

以下代码片段展示了如何绘制 study 的 Pareto 前沿。

import optuna
from plotly.io import show


def objective(trial):
    x = trial.suggest_float("x", 0, 5)
    y = trial.suggest_float("y", 0, 3)

    v0 = 4 * x**2 + 4 * y**2
    v1 = (x - 5) ** 2 + (y - 5) ** 2
    return v0, v1


study = optuna.create_study(directions=["minimize", "minimize"])
study.optimize(objective, n_trials=50)

fig = optuna.visualization.plot_pareto_front(study)
show(fig)

以下代码片段展示了如何绘制一个 3 维 study 的 2 维 Pareto 前沿。此示例是可扩展的,例如,用于绘制一个 4 维 study 的 2 维或 3 维 Pareto 前沿,以此类推。

import optuna
from plotly.io import show


def objective(trial):
    x = trial.suggest_float("x", 0, 5)
    y = trial.suggest_float("y", 0, 3)
    v0 = 5 * x**2 + 3 * y**2
    v1 = (x - 10) ** 2 + (y - 10) ** 2
    v2 = x + y

    return v0, v1, v2


study = optuna.create_study(directions=["minimize", "minimize", "minimize"])

study.optimize(objective, n_trials=100)

fig = optuna.visualization.plot_pareto_front(
    study,
    targets=lambda t: (t.values[0], t.values[1]),
    target_names=["Objective 0", "Objective 1"],
)

show(fig)

脚本总运行时间: (0 分钟 0.311 秒)

由 Sphinx-Gallery 生成的画廊