Utilities#
- saealib.hypervolume(f, reference_point)[ソース]#
Compute hypervolume indicator (minimization convention).
The hypervolume (S-metric) indicator was introduced by Zitzler & Thiele (1998) as a way to measure the quality of a Pareto front approximation without a priori knowledge of the true front.
Uses a recursive slicing algorithm. Complexity: O(n^(m-1) * n log n), where n is the number of points and m is the number of objectives.
- パラメータ:
f (np.ndarray) -- Objective matrix, shape (n, n_obj).
reference_point (np.ndarray) -- Reference (nadir) point, shape (n_obj,). Each component must be strictly greater than the corresponding component of at least one point in f for a non-zero hypervolume to be returned.
- 戻り値:
Hypervolume value.
- 戻り値の型:
float
- saealib.hypervolume_contributions(f, reference_point=None, direction=None, margin=0.1)[ソース]#
Compute exclusive hypervolume contributions for each point.
The exclusive contribution of point
iis defined as:Delta_HV(i) = HV(S) - HV(S \ {i})
i.e. the volume exclusively dominated by point
irelative to the reference point. Higher is better, consistent with the library-wide convention. Dominated points and points not strictly better than the reference point contribute 0.This function reuses
hypervolume()and therefore inherits the minimisation convention internally. Use thedirectionparameter to handle maximisation objectives.警告
Computing hypervolume is exponential in the number of objectives, and the leave-one-out loop adds a factor of N. For many objectives or large N this becomes prohibitively expensive. The hypervolume kernel this function calls already processes objectives rather than points, the slicing structure of While, Hingston, Barone & Huband (2006), so the remaining cost is the repetition itself: a faster contribution algorithm has to avoid recomputing the whole volume once per point. That work is not to be confused with the WFG benchmark-problem paper by Huband et al. (2006), a different paper despite the overlapping author list.
- パラメータ:
f (np.ndarray) -- Objective matrix, shape
(N, n_obj).reference_point (np.ndarray or None, optional) -- Reference point in the original objective space, shape
(n_obj,). IfNone, it is auto-computed from the data with a fractional padding controlled bymargin.direction (np.ndarray or None, optional) -- Per-objective optimisation direction:
+1to maximise,-1to minimise.Nonedefaults to all-minimise (equivalent tonp.full(n_obj, -1.0)). Same convention assaealib.comparators.spea2_fitness().margin (float, optional) -- Fractional padding used when auto-computing the reference point. For each objective axis the auto reference is placed at
nadir + margin * span. Ignored whenreference_pointis provided.
- 戻り値:
Exclusive hypervolume contribution per point, shape
(N,). All values are>= 0(dominated / out-of-reference points get 0).- 戻り値の型:
np.ndarray
参照
- Beume, N., Naujoks, B., & Emmerich, M. (2007).
SMS-EMOA: Multiobjective selection based on dominated hypervolume. European Journal of Operational Research, 181(3), 1653-1669. https://doi.org/10.1016/j.ejor.2006.08.008
- Zitzler, E., & Thiele, L. (1998).
Multiobjective optimization using evolutionary algorithms - a comparative case study. PPSN V, LNCS 1498, pp. 292-301.
- saealib.uniform_weight_vectors(n_obj, n_divisions)[ソース]#
Generate weight vectors uniformly distributed on the unit simplex.
Uses the simplex lattice design described in Das & Dennis (1998), widely applied in MOEA/D (Zhang & Li, 2007) and NSGA-III (Deb & Jain, 2014).
Each weight vector
wsatisfiessum(w) == 1andw_i >= 0. The granularity is1 / n_divisions; each component takes a value in{0, 1/H, 2/H, ..., 1}whereH = n_divisions.The number of vectors returned is
math.comb(n_obj + H - 1, H).- パラメータ:
n_obj (int) -- Number of objectives. Must be >= 2.
n_divisions (int) -- Number of divisions
Halong each axis. Must be >= 1. Larger values produce more weight vectors and finer coverage.
- 戻り値:
Weight matrix, shape
(N, n_obj). Each row sums to 1.0 and all entries are non-negative.- 戻り値の型:
np.ndarray
- 例外:
ValueError -- If
n_obj < 2orn_divisions < 1.
参照
[9]: Zhang, Q., & Li, H. (2007). MOEA/D: A multiobjective evolutionary algorithm based on decomposition. IEEE Transactions on Evolutionary Computation, 11(6), 712-731. (Appendix A describes the simplex lattice design originally due to Das & Dennis, 1998.)
サンプル
>>> uniform_weight_vectors(2, 4) array([[0. , 1. ], [0.25, 0.75], [0.5 , 0.5 ], [0.75, 0.25], [1. , 0. ]])