Note
Go to the end to download the full example code.
Computing Multi-Objective Quality Metrics#
TODO: Expand this
import numpy as np
import moocore
First, read the datasets.
spherical = moocore.get_dataset("spherical-250-10-3d.txt")
uniform = moocore.get_dataset("uniform-250-10-3d.txt")
ref = 1.1
ref_set = moocore.filter_dominated(
np.vstack((spherical[:, :-1], uniform[:, :-1]))
)
def apply_within_sets(x, fun, **kwargs):
"""Apply ``fun`` for each dataset in ``x``."""
_, uniq_index = np.unique(x[:, -1], return_index=True)
x_split = np.vsplit(x[:, :-1], uniq_index[1:])
return [fun(g, **kwargs) for g in x_split]
uniform_igd_plus = apply_within_sets(uniform, moocore.igd_plus, ref=ref_set)
spherical_igd_plus = apply_within_sets(
spherical, moocore.igd_plus, ref=ref_set
)
print(f"""
Uniform Spherical
------- ---------
Mean IGD+: {np.mean(uniform_igd_plus):.5f} {np.mean(spherical_igd_plus):.5f}
""")
Uniform Spherical
------- ---------
Mean IGD+: 5.96976 0.01988
Total running time of the script: (0 minutes 0.145 seconds)