Exemple #1
0
def _get_pareto_front_2d(
        study: MultiObjectiveStudy,
        names: Optional[List[str]],
        include_dominated_trials: bool = False) -> "go.Figure":
    if names is None:
        names = ["Objective 0", "Objective 1"]
    elif len(names) != 2:
        raise ValueError("The length of `names` is supposed to be 2.")

    trials = study.get_pareto_front_trials()
    if len(trials) == 0:
        _logger.warning("Your study does not have any completed trials.")

    point_colors = ["blue"] * len(trials)
    if include_dominated_trials:
        non_pareto_trials = _get_non_pareto_front_trials(study, trials)
        point_colors += ["red"] * len(non_pareto_trials)
        trials += non_pareto_trials

    data = go.Scatter(
        x=[t.values[0] for t in trials],
        y=[t.values[1] for t in trials],
        text=[_make_hovertext(t) for t in trials],
        mode="markers",
        hovertemplate="%{text}<extra></extra>",
        marker={"color": point_colors},
    )
    layout = go.Layout(title="Pareto-front Plot",
                       xaxis_title=names[0],
                       yaxis_title=names[1])
    return go.Figure(data=data, layout=layout)
Exemple #2
0
def _get_pareto_front_3d(study: MultiObjectiveStudy,
                         names: Optional[List[str]]) -> "go.Figure":
    if names is None:
        names = ["Objective 0", "Objective 1", "Objective 2"]
    elif len(names) != 3:
        raise ValueError("The length of `names` is supposed to be 3.")

    trials = study.get_pareto_front_trials()
    if len(trials) == 0:
        _logger.warning("Your study does not have any completed trials.")

    data = go.Scatter3d(
        x=[t.values[0] for t in trials],
        y=[t.values[1] for t in trials],
        z=[t.values[2] for t in trials],
        text=[_make_hovertext(t) for t in trials],
        mode="markers",
        hovertemplate="%{text}<extra></extra>",
    )
    layout = go.Layout(
        title="Pareto-front Plot",
        scene={
            "xaxis_title": names[0],
            "yaxis_title": names[1],
            "zaxis_title": names[2]
        },
    )
    return go.Figure(data=data, layout=layout)
def _get_pareto_front_3d(
    study: MultiObjectiveStudy,
    names: Optional[List[str]],
    include_dominated_trials: bool = False,
    axis_order: Optional[List[int]] = None,
) -> "go.Figure":
    if names is None:
        names = ["Objective 0", "Objective 1", "Objective 2"]
    elif len(names) != 3:
        raise ValueError("The length of `names` is supposed to be 3.")

    trials = study.get_pareto_front_trials()
    if len(trials) == 0:
        _logger.warning("Your study does not have any completed trials.")

    point_colors = ["blue"] * len(trials)
    if include_dominated_trials:
        non_pareto_trials = _get_non_pareto_front_trials(study, trials)
        point_colors += ["red"] * len(non_pareto_trials)
        trials += non_pareto_trials

    if axis_order is None:
        axis_order = list(range(3))
    else:
        if len(axis_order) != 3:
            raise ValueError(
                f"Size of `axis_order` {axis_order}. Expect: 3, Actual: {len(axis_order)}."
            )
        if len(set(axis_order)) != 3:
            raise ValueError(f"Elements of given `axis_order` {axis_order} are not unique!.")
        if max(axis_order) > 2:
            raise ValueError(
                f"Given `axis_order` {axis_order} contains invalid index {max(axis_order)} "
                "higher than 2."
            )
        if min(axis_order) < 0:
            raise ValueError(
                f"Given `axis_order` {axis_order} contains invalid index {min(axis_order)} "
                "lower than 0."
            )

    data = go.Scatter3d(
        x=[t.values[axis_order[0]] for t in trials],
        y=[t.values[axis_order[1]] for t in trials],
        z=[t.values[axis_order[2]] for t in trials],
        text=[_make_hovertext(t) for t in trials],
        mode="markers",
        hovertemplate="%{text}<extra></extra>",
        marker={"color": point_colors},
    )
    layout = go.Layout(
        title="Pareto-front Plot",
        scene={
            "xaxis_title": names[axis_order[0]],
            "yaxis_title": names[axis_order[1]],
            "zaxis_title": names[axis_order[2]],
        },
    )
    return go.Figure(data=data, layout=layout)
def _get_non_pareto_front_trials(
    study: MultiObjectiveStudy,
    pareto_trials: List["multi_objective.trial.FrozenMultiObjectiveTrial"],
) -> List["multi_objective.trial.FrozenMultiObjectiveTrial"]:

    non_pareto_trials = []
    for trial in study.get_trials():
        if trial.state == TrialState.COMPLETE and trial not in pareto_trials:
            non_pareto_trials.append(trial)
    return non_pareto_trials
Exemple #5
0
 def from_study(study: MultiObjectiveStudy):
     return MultiObjectiveResults(study.get_pareto_front_trials(),
                                  study.trials)