optuna

Форк
0
55 строк · 1.7 Кб
1
import itertools
2
from typing import Tuple
3

4
import numpy as np
5
import pytest
6

7
import optuna
8

9

10
def _compute_hssp_truth_and_approx(test_case: np.ndarray, subset_size: int) -> Tuple[float, float]:
11
    r = 1.1 * np.max(test_case, axis=0)
12
    truth = 0.0
13
    for subset in itertools.permutations(test_case, subset_size):
14
        truth = max(truth, optuna._hypervolume.WFG().compute(np.asarray(subset), r))
15
    indices = optuna._hypervolume.hssp._solve_hssp(
16
        test_case, np.arange(len(test_case)), subset_size, r
17
    )
18
    approx = optuna._hypervolume.WFG().compute(test_case[indices], r)
19
    return truth, approx
20

21

22
@pytest.mark.parametrize("dim", [2, 3])
23
def test_solve_hssp(dim: int) -> None:
24
    rng = np.random.RandomState(128)
25

26
    for i in range(1, 9):
27
        subset_size = np.random.randint(1, i + 1)
28
        test_case = rng.rand(8, dim)
29
        truth, approx = _compute_hssp_truth_and_approx(test_case, subset_size)
30
        assert approx / truth > 0.6321  # 1 - 1/e
31

32

33
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
34
def test_solve_hssp_infinite_loss() -> None:
35
    rng = np.random.RandomState(128)
36

37
    subset_size = 4
38
    test_case = rng.rand(9, 2)
39
    test_case[-1].fill(float("inf"))
40
    truth, approx = _compute_hssp_truth_and_approx(test_case, subset_size)
41
    assert np.isinf(truth)
42
    assert np.isinf(approx)
43

44
    test_case = rng.rand(9, 3)
45
    test_case[-1].fill(float("inf"))
46
    truth, approx = _compute_hssp_truth_and_approx(test_case, subset_size)
47
    assert truth == 0
48
    assert np.isnan(approx)
49

50
    for dim in range(2, 4):
51
        test_case = rng.rand(9, dim)
52
        test_case[-1].fill(-float("inf"))
53
        truth, approx = _compute_hssp_truth_and_approx(test_case, subset_size)
54
        assert np.isinf(truth)
55
        assert np.isinf(approx)
56

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.