mirror of
https://github.com/wassname/optuna-dashboard.git
synced 2026-10-29 13:20:48 +08:00
fix pareto-front
This commit is contained in:
1 parent
5b4f0bb40e
commit
8ebed9b99c
1 file changed
+24
-6
@@ -181,20 +181,38 @@ const getIsDominatedTrialND = (normalizedValues: number[][]) => {
|
||||
}
|
||||
|
||||
const getIsDominatedTrial2D = (normalizedValues: number[][]) => {
|
||||
if (normalizedValues.length === 0) {
|
||||
return []
|
||||
}
|
||||
// Fast pareto front algorithm (O(N log N) complexity).
|
||||
const sorted = normalizedValues
|
||||
.map((values, i) => [values[0], values[1], i])
|
||||
.sort()
|
||||
.sort((a, b) =>
|
||||
a[0] > b[0]
|
||||
? 1
|
||||
: a[0] < b[0]
|
||||
? -1
|
||||
: a[1] > b[1]
|
||||
? 1
|
||||
: a[1] < b[1]
|
||||
? -1
|
||||
: 0
|
||||
)
|
||||
let maxValue0 = sorted[0][0]
|
||||
let minValue1 = sorted[0][1]
|
||||
const dominatedTrials: boolean[] = new Array(normalizedValues.length).fill(
|
||||
true
|
||||
)
|
||||
|
||||
const dominatedTrials: boolean[] = new Array(normalizedValues.length).fill(
|
||||
false
|
||||
)
|
||||
sorted.forEach((values) => {
|
||||
if (values[1] <= minValue1) {
|
||||
dominatedTrials[values[2]] = false
|
||||
if (
|
||||
values[1] > minValue1 ||
|
||||
(values[1] >= minValue1 && values[0] > maxValue0)
|
||||
) {
|
||||
dominatedTrials[values[2]] = true
|
||||
minValue1 = values[1]
|
||||
}
|
||||
maxValue0 = values[0]
|
||||
})
|
||||
return dominatedTrials
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user