///|
pub(all) struct ParetoResult {
fronts : Array[Array[String]]
front_indices : Array[Int32]
dominated_by : Array[Array[Int32]]
} derive(@debug.Debug)
///|
fn dominates(m : DecisionMatrix, a : Int32, b : Int32) -> Bool {
let mut strictly = false
for j in 0.. y {
strictly = true
}
} else {
if x > y {
return false
}
if x < y {
strictly = true
}
}
}
strictly
}
///|
/// Exact dominance, intentionally without tolerance that could break transitivity.
pub fn pareto_fronts(m : DecisionMatrix) -> ParetoResult {
let n = m.names.length()
let dominated_by : Array[Array[Int32]] = [ for _ in 0.. [] ]
let successors : Array[Array[Int32]] = [ for _ in 0.. [] ]
for a in 0.. row.length())
let front_indices = Array::make(n, -1)
let fronts : Array[Array[String]] = []
let mut current = [ for i in 0.. i ]
while current.length() > 0 {
let index = fronts.length()
fronts.push(current.map(i => m.names[i]))
for i in current {
front_indices[i] = index
}
for i in current {
for k in successors[i] {
remaining[k] -= 1
}
}
current = [
for i in 0.. i
]
}
{ fronts, front_indices, dominated_by, }
}
///|
pub extend ParetoResult with @debug.Debug::{to_repr}