Source code for paref.pareto_reflections.find_edge_points

import numpy as np

from paref.pareto_reflections.minimize_weighted_norm_to_utopia import MinimizeWeightedNormToUtopia


[docs]class FindEdgePoints(MinimizeWeightedNormToUtopia): """Find the edge points of the Pareto front .. warning:: This Pareto reflection assumes that there exist edge points When to use ----------- This Pareto reflection should be used if the edge points of the Pareto front are searched. .. note:: In to dimensions, the edge points of the Pareto front always exist. What it does ------------ The Pareto points of this map are the ones which minimize the weighted sum where one component is given much smaller weight than the others. Mathematical formula -------------------- .. math:: p(x) = \sum_{i=1,...,n,i\\neq j}\\epsilon x_{i}+ x_j where :math:`j` is the component in which the minimum is searched. Examples -------- # TBA: add """ def __init__(self, dimension_domain: int, dimension: int, epsilon: float = 1e-3): """Specify the dimension of the input domain and the component of which the edge point is searched .. warning:: The smaller epsilon, the better. However, picking an epsilon too small may lead to an unstable optimization. Parameters ---------- dimension_domain : int dimension of domain (i.e. dimension of target space of blackbox function) dimension : int component of which the edge point is searched epsilon : float default 1e-3 weight on the component """ self.epsilon = epsilon self.dimension = dimension self._dimension_domain = dimension_domain self.potency = np.ones(dimension_domain) scalar = np.ones(dimension_domain) scalar[self.dimension] = epsilon self.scalar = scalar self.utopia_point = np.zeros(dimension_domain) @property def dimension_codomain(self) -> int: return 1 @property def dimension_domain(self) -> int: return self._dimension_domain