Source code for pyleecan.Methods.Output.XOutput.get_pareto_index

import numpy as np
import matplotlib.pyplot as plt
from ....Classes.OptiObjective import OptiObjective


[docs]def get_pareto_index(self): """Return index of individuals in the pareto Parameters ---------- self: XOutput Returns ------- idx_non_dom: list list of index of non dominated individuals """ # Gather fitness results data = [ val.result for _, val in self.xoutput_dict.items() if isinstance(val, OptiObjective) ] fitness = np.array(data).T # Get fitness values and ngen is_valid = np.array(self["is_valid"]) # Keep only valid values indx = np.where(is_valid) fitness = fitness[indx] # Get pareto front pareto = fitness # Get dominated values idx_non_dom = list(range(len(pareto))) N = len(pareto) for i in range(N): for j in idx_non_dom: if all(pareto[j] <= pareto[i]) and any(pareto[j] < pareto[i]): idx_non_dom.remove(i) break return idx_non_dom