optuna.visualization.plot_pareto_front

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

Plot the Pareto front of a study.

See also

Please refer to Multi-objective Optimization with Optuna for the tutorial of the Pareto front visualization.

Example

The following code snippet shows how to plot the Pareto front of a study.

import optuna


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)
fig.show()

Example

The following code snippet shows how to plot a 2-dimensional Pareto front of a 3-dimensional study. This example is scalable, e.g., for plotting a 2- or 3-dimensional Pareto front of a 4-dimensional study and so on.

import optuna

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"],
)

fig.show()
Parameters:
  • study (Study) – A Study object whose trials are plotted for their objective values. The number of objectives must be either 2 or 3 when targets is None.

  • target_names (list[str] | None) – Objective name list used as the axis titles. If None is specified, “Objective {objective_index}” is used instead. If targets is specified for a study that does not contain any completed trial, target_name must be specified.

  • include_dominated_trials (bool) – A flag to include all dominated trial’s objective values.

  • axis_order (list[int] | None) –

    A list of indices indicating the axis order. If None is specified, default order is used. axis_order and targets cannot be used at the same time.

    Warning

    Deprecated in v3.0.0. This feature will be removed in the future. The removal of this feature is currently scheduled for v5.0.0, but this schedule is subject to change. See https://github.com/optuna/optuna/releases/tag/v3.0.0.

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

    An optional function that computes the objective constraints. It must take a FrozenTrial and return the constraints. The return value must be a sequence of float s. A value strictly larger than 0 means that a constraint is violated. A value equal to or smaller than 0 is considered feasible. This specification is the same as in, for example, NSGAIISampler.

    If given, trials are classified into three categories: feasible and best, feasible but non-best, and infeasible. Categories are shown in different colors. Here, whether a trial is best (on Pareto front) or not is determined ignoring all infeasible trials.

    Warning

    Deprecated in v4.0.0. This feature will be removed in the future. The removal of this feature is currently scheduled for v6.0.0, but this schedule is subject to change. See https://github.com/optuna/optuna/releases/tag/v4.0.0.

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

    A function that returns targets values to display. The argument to this function is FrozenTrial. axis_order and targets cannot be used at the same time. If study.n_objectives is neither 2 nor 3, targets must be specified.

    Note

    Added in v3.0.0 as an experimental feature. The interface may change in newer versions without prior notice. See https://github.com/optuna/optuna/releases/tag/v3.0.0.

Returns:

A plotly.graph_objects.Figure object.

Return type:

Figure