Source code for paref.pareto_reflections.find_1_pareto_points

import numpy as np

from paref.pareto_reflections.minimize_weighted_norm_to_utopia import MinimizeWeightedNormToUtopia


[docs]class Find1ParetoPoints(MinimizeWeightedNormToUtopia): """Find a Pareto point which is minimal in some specified component When to use ----------- This Pareto reflection should be used if a Pareto point is desired which lie on the boundary of the Pareto front, i.e. are minimal in one component. .. note:: In to dimensions, the edge points of the Pareto front are given by the boundary of the Pareto front. I.p. in two dimensions, this Pareto reflection searches for the edge points of the Pareto front. What it does ------------ The Pareto points of this map are the ones which minimize the weighted sum where one component is given much more 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 in which the minimum 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 in which the minimum is searched epsilon : float default 1e-3 weight on the other components """ self.epsilon = epsilon self.dimension = dimension self._dimension_domain = dimension_domain self.potency = np.ones(dimension_domain) scalar = self.epsilon * np.ones(dimension_domain) scalar[self.dimension] = 1 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