From d3135c155174bc2c78454d7b53ce27020507248d Mon Sep 17 00:00:00 2001 From: hrntsm Date: Wed, 19 Jul 2023 22:29:43 +0900 Subject: [PATCH 1/6] Add serialize constraints --- optuna_dashboard/_serializer.py | 2 ++ optuna_dashboard/ts/apiClient.ts | 4 +++- optuna_dashboard/ts/types/index.d.ts | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/optuna_dashboard/_serializer.py b/optuna_dashboard/_serializer.py index 64ff7cf3..64e25a65 100644 --- a/optuna_dashboard/_serializer.py +++ b/optuna_dashboard/_serializer.py @@ -9,6 +9,7 @@ import numpy as np from optuna.distributions import BaseDistribution from optuna.distributions import CategoricalDistribution from optuna.study import StudySummary +from optuna.samplers._base import _CONSTRAINTS_KEY from optuna.trial import FrozenTrial from . import _note as note @@ -187,6 +188,7 @@ def serialize_frozen_trial( ), "note": note.get_note_from_system_attrs(study_system_attrs, trial._trial_id), "artifacts": list_trial_artifacts(study_system_attrs, trial._trial_id), + "constraints": trial_system_attrs.get(_CONSTRAINTS_KEY, []), } serialized_intermediate_values: list[IntermediateValue] = [] diff --git a/optuna_dashboard/ts/apiClient.ts b/optuna_dashboard/ts/apiClient.ts index 3e291310..21f1e62a 100644 --- a/optuna_dashboard/ts/apiClient.ts +++ b/optuna_dashboard/ts/apiClient.ts @@ -29,7 +29,8 @@ interface TrialResponse { user_attrs: Attribute[] system_attrs: Attribute[] note: Note - artifacts: Artifact[] + artifacts: Artifact[], + constraints: number[] } const convertTrialResponse = (res: TrialResponse): Trial => { @@ -52,6 +53,7 @@ const convertTrialResponse = (res: TrialResponse): Trial => { system_attrs: res.system_attrs, note: res.note, artifacts: res.artifacts, + constraints: res.constraints, } } diff --git a/optuna_dashboard/ts/types/index.d.ts b/optuna_dashboard/ts/types/index.d.ts index 72ba1dea..040a1fc3 100644 --- a/optuna_dashboard/ts/types/index.d.ts +++ b/optuna_dashboard/ts/types/index.d.ts @@ -112,6 +112,7 @@ type Trial = { }[] user_attrs: Attribute[] system_attrs: Attribute[] + constraints: number[] note: Note artifacts: Artifact[] } From c7402967395dc7c1c1f4c75c8de72c3f7d351384 Mon Sep 17 00:00:00 2001 From: hrntsm Date: Fri, 21 Jul 2023 16:05:00 +0900 Subject: [PATCH 2/6] Add constraint to pareto front plot --- .../ts/components/GraphParetoFront.tsx | 47 +++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/optuna_dashboard/ts/components/GraphParetoFront.tsx b/optuna_dashboard/ts/components/GraphParetoFront.tsx index 18f5f896..33c9c73a 100644 --- a/optuna_dashboard/ts/components/GraphParetoFront.tsx +++ b/optuna_dashboard/ts/components/GraphParetoFront.tsx @@ -108,9 +108,10 @@ const makeScatterObject = ( objectiveXId: number, objectiveYId: number, hovertemplate: string, - dominated: boolean + dominated: boolean, + feasible: boolean ): Partial => { - const marker = makeMarker(trials, dominated) + const marker = makeMarker(trials, dominated, feasible) return { x: trials.map((t) => t.values![objectiveXId] as number), y: trials.map((t) => t.values![objectiveYId] as number), @@ -124,9 +125,10 @@ const makeScatterObject = ( const makeMarker = ( trials: Trial[], - dominated: boolean + dominated: boolean, + feasible: boolean ): Partial => { - if (dominated) { + if (feasible && dominated) { return { line: { width: 0.5, color: "Grey" }, // @ts-ignore @@ -137,7 +139,7 @@ const makeMarker = ( title: "Trial", }, } - } else { + } else if (feasible && !dominated) { return { line: { width: 0.5, color: "Grey" }, // @ts-ignore @@ -149,6 +151,11 @@ const makeMarker = ( xpad: 80, }, } + } else { + return { + // @ts-ignore + color: "#cccccc", + } } } @@ -183,8 +190,18 @@ const plotParetoFront = ( return } + const feasibleTrials: Trial[] = [] + const InfeasibleTrials: Trial[] = [] + filteredTrials.forEach(t => { + if(t.constraints.every(c => c <= 0)){ + feasibleTrials.push(t) + } else { + InfeasibleTrials.push(t) + } + }) + const normalizedValues: number[][] = [] - filteredTrials.forEach((t) => { + feasibleTrials.forEach((t) => { if (t.values && t.values.length === study.directions.length) { const trialValues = t.values.map((v, i) => { return study.directions[i] === "minimize" @@ -210,17 +227,29 @@ const plotParetoFront = ( const plotData: Partial[] = [ makeScatterObject( - filteredTrials.filter((t, i) => dominatedTrials[i]), + feasibleTrials.filter((t, i) => dominatedTrials[i]), objectiveXId, objectiveYId, - "%{text}Trial", + InfeasibleTrials.length === 0 + ?"%{text}Trial" + :"%{text}Feasible Trial", + true, true ), makeScatterObject( - filteredTrials.filter((t, i) => !dominatedTrials[i]), + feasibleTrials.filter((t, i) => !dominatedTrials[i]), objectiveXId, objectiveYId, "%{text}Best Trial", + false, + true + ), + makeScatterObject( + InfeasibleTrials, + objectiveXId, + objectiveYId, + "%{text}Infeasible Trial", + false, false ), ] From 6b912ae732eff2798c2970201d50395951f00056 Mon Sep 17 00:00:00 2001 From: hrntsm Date: Fri, 21 Jul 2023 16:05:29 +0900 Subject: [PATCH 3/6] Apply formatting --- optuna_dashboard/_serializer.py | 2 +- optuna_dashboard/ts/apiClient.ts | 2 +- optuna_dashboard/ts/components/GraphParetoFront.tsx | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/optuna_dashboard/_serializer.py b/optuna_dashboard/_serializer.py index 64e25a65..10bdc8e5 100644 --- a/optuna_dashboard/_serializer.py +++ b/optuna_dashboard/_serializer.py @@ -8,8 +8,8 @@ from typing import Union import numpy as np from optuna.distributions import BaseDistribution from optuna.distributions import CategoricalDistribution -from optuna.study import StudySummary from optuna.samplers._base import _CONSTRAINTS_KEY +from optuna.study import StudySummary from optuna.trial import FrozenTrial from . import _note as note diff --git a/optuna_dashboard/ts/apiClient.ts b/optuna_dashboard/ts/apiClient.ts index 21f1e62a..12feaf4a 100644 --- a/optuna_dashboard/ts/apiClient.ts +++ b/optuna_dashboard/ts/apiClient.ts @@ -29,7 +29,7 @@ interface TrialResponse { user_attrs: Attribute[] system_attrs: Attribute[] note: Note - artifacts: Artifact[], + artifacts: Artifact[] constraints: number[] } diff --git a/optuna_dashboard/ts/components/GraphParetoFront.tsx b/optuna_dashboard/ts/components/GraphParetoFront.tsx index 33c9c73a..f7afdf06 100644 --- a/optuna_dashboard/ts/components/GraphParetoFront.tsx +++ b/optuna_dashboard/ts/components/GraphParetoFront.tsx @@ -192,8 +192,8 @@ const plotParetoFront = ( const feasibleTrials: Trial[] = [] const InfeasibleTrials: Trial[] = [] - filteredTrials.forEach(t => { - if(t.constraints.every(c => c <= 0)){ + filteredTrials.forEach((t) => { + if (t.constraints.every((c) => c <= 0)) { feasibleTrials.push(t) } else { InfeasibleTrials.push(t) @@ -231,8 +231,8 @@ const plotParetoFront = ( objectiveXId, objectiveYId, InfeasibleTrials.length === 0 - ?"%{text}Trial" - :"%{text}Feasible Trial", + ? "%{text}Trial" + : "%{text}Feasible Trial", true, true ), From 2f8ff434f3c8a8395c006891fb0aca40c496af1e Mon Sep 17 00:00:00 2001 From: hrntsm Date: Fri, 21 Jul 2023 17:01:58 +0900 Subject: [PATCH 4/6] Update constants key to work with v2.1 --- optuna_dashboard/_serializer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/optuna_dashboard/_serializer.py b/optuna_dashboard/_serializer.py index 10bdc8e5..ef785cbf 100644 --- a/optuna_dashboard/_serializer.py +++ b/optuna_dashboard/_serializer.py @@ -8,7 +8,6 @@ from typing import Union import numpy as np from optuna.distributions import BaseDistribution from optuna.distributions import CategoricalDistribution -from optuna.samplers._base import _CONSTRAINTS_KEY from optuna.study import StudySummary from optuna.trial import FrozenTrial @@ -84,6 +83,7 @@ if TYPE_CHECKING: MAX_ATTR_LENGTH = 1024 +CONSTRAINTS_KEY = "constraints" def serialize_attrs(attrs: dict[str, Any]) -> list[Attribute]: @@ -188,7 +188,7 @@ def serialize_frozen_trial( ), "note": note.get_note_from_system_attrs(study_system_attrs, trial._trial_id), "artifacts": list_trial_artifacts(study_system_attrs, trial._trial_id), - "constraints": trial_system_attrs.get(_CONSTRAINTS_KEY, []), + "constraints": trial_system_attrs.get(CONSTRAINTS_KEY, []), } serialized_intermediate_values: list[IntermediateValue] = [] From 7fbcb1900cd0e68bd5820babf653531039a0c55f Mon Sep 17 00:00:00 2001 From: hrntsm Date: Mon, 24 Jul 2023 10:19:06 +0900 Subject: [PATCH 5/6] Update interface of constraint to optional --- optuna_dashboard/ts/apiClient.ts | 2 +- optuna_dashboard/ts/types/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/optuna_dashboard/ts/apiClient.ts b/optuna_dashboard/ts/apiClient.ts index 12feaf4a..b03f5691 100644 --- a/optuna_dashboard/ts/apiClient.ts +++ b/optuna_dashboard/ts/apiClient.ts @@ -30,7 +30,7 @@ interface TrialResponse { system_attrs: Attribute[] note: Note artifacts: Artifact[] - constraints: number[] + constraints?: number[] } const convertTrialResponse = (res: TrialResponse): Trial => { diff --git a/optuna_dashboard/ts/types/index.d.ts b/optuna_dashboard/ts/types/index.d.ts index 040a1fc3..c49339e0 100644 --- a/optuna_dashboard/ts/types/index.d.ts +++ b/optuna_dashboard/ts/types/index.d.ts @@ -112,7 +112,7 @@ type Trial = { }[] user_attrs: Attribute[] system_attrs: Attribute[] - constraints: number[] + constraints?: number[] note: Note artifacts: Artifact[] } From c62b58add8c5671a45f41d896ea15a4df0282d3d Mon Sep 17 00:00:00 2001 From: hrntsm Date: Tue, 25 Jul 2023 11:35:14 +0900 Subject: [PATCH 6/6] Revert "Update interface of constraint to optional" This reverts commit 7fbcb1900cd0e68bd5820babf653531039a0c55f. --- optuna_dashboard/ts/apiClient.ts | 2 +- optuna_dashboard/ts/types/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/optuna_dashboard/ts/apiClient.ts b/optuna_dashboard/ts/apiClient.ts index b03f5691..12feaf4a 100644 --- a/optuna_dashboard/ts/apiClient.ts +++ b/optuna_dashboard/ts/apiClient.ts @@ -30,7 +30,7 @@ interface TrialResponse { system_attrs: Attribute[] note: Note artifacts: Artifact[] - constraints?: number[] + constraints: number[] } const convertTrialResponse = (res: TrialResponse): Trial => { diff --git a/optuna_dashboard/ts/types/index.d.ts b/optuna_dashboard/ts/types/index.d.ts index c49339e0..040a1fc3 100644 --- a/optuna_dashboard/ts/types/index.d.ts +++ b/optuna_dashboard/ts/types/index.d.ts @@ -112,7 +112,7 @@ type Trial = { }[] user_attrs: Attribute[] system_attrs: Attribute[] - constraints?: number[] + constraints: number[] note: Note artifacts: Artifact[] }