Covering
The covering (C-metric) of a front $B$ by a front $A$ is the fraction of $B$ weakly dominated by $A$ [5] (Def. 9), [4]:
\[C(A, B) = \frac{|\{\, b \in B : \exists\, a \in A,\ a \preceq b \,\}|}{|B|} \in [0, 1],\]
where $a \preceq b$ ($a$ covers $b$) means that $a$ dominates $b$ or equals it (Def. 4 of [5]). $C(A, B) = 1$ means that every point of $B$ is covered. The metric is not symmetric and $C(A, B) \ne 1 - C(B, A)$ in general, so report both directions.
Some implementations count only strict dominance, so a point shared by both fronts is not covered. covering uses weak dominance by default and strict dominance with relation = StrictDominance():
julia> using MultiObjectiveMetrics
julia> A = [[0.0, 1.0], [1.0, 0.0]]; B = [[0.0, 1.0], [2.0, 0.5]];
julia> covering(A, B), covering(A, B; relation = StrictDominance())
(1.0, 0.5)MultiObjectiveMetrics.covering — Function
covering(A, B; relation = WeakDominance(), tol = Tolerance())Covering (C-metric) of B by A [4], [5] (Def. 9): the fraction of the points of B covered by at least one point of A,
C(A, B) = |{b ∈ B : ∃ a ∈ A, a ⪰ b}| / |B|.With the default WeakDominance, a ⪰ b means that a dominates or equals b, as in the source. StrictDominance does not count equal points; it reproduces the covering of [8] and of Metaheuristics.jl. Before counting, both sets are reduced to their non-dominated points and equivalent points are counted once.
C(A, B) = 1 means that A covers all of B. The metric is not symmetric; report both C(A, B) and C(B, A). Returns NaN when B is empty.
Examples
julia> A = [[0.0, 1.0], [1.0, 0.0]]; B = [[0.0, 1.0], [2.0, 0.5]];
julia> covering(A, B)
1.0
julia> covering(A, B; relation = StrictDominance())
0.5