optuna
63 строки · 1.8 Кб
1import numpy as np2import pytest3
4import optuna5
6
7def test_wfg_2d() -> None:8for n in range(2, 30):9r = n * np.ones(2)10s = np.asarray([[n - 1 - i, i] for i in range(n)])11for i in range(n + 1):12s = np.vstack((s, np.asarray([i, n - i])))13np.random.shuffle(s)14v = optuna._hypervolume.WFG().compute(s, r)15assert v == n * n - n * (n - 1) // 216
17
18def test_wfg_3d() -> None:19n = 320r = 10 * np.ones(n)21s = [np.hstack((np.zeros(i), [1], np.zeros(n - i - 1))) for i in range(n)]22for _ in range(10):23s.append(np.random.randint(1, 10, size=(n,)))24o = np.asarray(s)25np.random.shuffle(o)26v = optuna._hypervolume.WFG().compute(o, r)27assert v == 10**n - 128
29
30def test_wfg_nd() -> None:31for n in range(2, 10):32r = 10 * np.ones(n)33s = [np.hstack((np.zeros(i), [1], np.zeros(n - i - 1))) for i in range(n)]34for _ in range(10):35s.append(np.random.randint(1, 10, size=(n,)))36o = np.asarray(s)37np.random.shuffle(o)38v = optuna._hypervolume.WFG().compute(o, r)39assert v == 10**n - 140
41
42def test_wfg_duplicate_points() -> None:43n = 344r = 10 * np.ones(n)45s = [np.hstack((np.zeros(i), [1], np.zeros(n - i - 1))) for i in range(n)]46for _ in range(10):47s.append(np.random.randint(1, 10, size=(n,)))48o = np.asarray(s)49v = optuna._hypervolume.WFG().compute(o, r)50
51# Add an already existing point.52o = np.vstack([o, o[-1]])53
54np.random.shuffle(o)55v_with_duplicate_point = optuna._hypervolume.WFG().compute(o, r)56assert v == v_with_duplicate_point57
58
59def test_invalid_input() -> None:60r = np.ones(3)61s = np.atleast_2d(2 * np.ones(3))62with pytest.raises(ValueError):63_ = optuna._hypervolume.WFG().compute(s, r)64