tests.test_optimizers.test_best_results   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 77
dl 0
loc 115
rs 10
c 0
b 0
f 0

5 Functions

Rating   Name   Duplication   Size   Complexity  
A test_best_results_1() 0 23 1
A objective_function() 0 4 1
A test_best_results_0() 0 23 1
A objective_function_m5() 0 4 1
A objective_function_p5() 0 4 1
1
"""Test module for best results optimizer functionality."""
2
3
import numpy as np
4
import pytest
5
6
from hyperactive import Hyperactive
7
8
from ._parametrize import optimizers
9
10
11
def objective_function(opt):
12
    """Return standard quadratic objective function."""
13
    score = -opt["x1"] * opt["x1"]
14
    return score
15
16
17
def objective_function_m5(opt):
18
    """Quadratic objective function shifted by -5."""
19
    score = -(opt["x1"] - 5) * (opt["x1"] - 5)
20
    return score
21
22
23
def objective_function_p5(opt):
24
    """Quadratic objective function shifted by +5."""
25
    score = -(opt["x1"] + 5) * (opt["x1"] + 5)
26
    return score
27
28
29
search_space_0 = {"x1": list(np.arange(-100, 101, 1))}
30
search_space_1 = {"x1": list(np.arange(0, 101, 1))}
31
search_space_2 = {"x1": list(np.arange(-100, 1, 1))}
32
33
search_space_3 = {"x1": list(np.arange(-10, 11, 0.1))}
34
search_space_4 = {"x1": list(np.arange(0, 11, 0.1))}
35
search_space_5 = {"x1": list(np.arange(-10, 1, 0.1))}
36
37
search_space_6 = {"x1": list(np.arange(-0.0000000003, 0.0000000003, 0.0000000001))}
38
search_space_7 = {"x1": list(np.arange(0, 0.0000000003, 0.0000000001))}
39
search_space_8 = {"x1": list(np.arange(-0.0000000003, 0, 0.0000000001))}
40
41
objective_para = (
42
    "objective",
43
    [
44
        (objective_function),
45
        (objective_function_m5),
46
        (objective_function_p5),
47
    ],
48
)
49
50
search_space_para = (
51
    "search_space",
52
    [
53
        (search_space_0),
54
        (search_space_1),
55
        (search_space_2),
56
        (search_space_3),
57
        (search_space_4),
58
        (search_space_5),
59
        (search_space_6),
60
        (search_space_7),
61
        (search_space_8),
62
    ],
63
)
64
65
66
@pytest.mark.parametrize(*objective_para)
67
@pytest.mark.parametrize(*search_space_para)
68
@pytest.mark.parametrize(*optimizers)
69
def test_best_results_0(Optimizer, search_space, objective):
70
    """Test best score consistency with best parameters."""
71
    search_space = search_space
72
    objective_function = objective
73
74
    initialize = {"vertices": 2}
75
76
    hyper = Hyperactive()
77
    hyper.add_search(
78
        objective_function,
79
        search_space,
80
        optimizer=Optimizer(),
81
        n_iter=10,
82
        memory=False,
83
        initialize=initialize,
84
    )
85
    hyper.run()
86
87
    assert hyper.best_score(objective_function) == objective_function(
88
        hyper.best_para(objective_function)
89
    )
90
91
92
@pytest.mark.parametrize(*objective_para)
93
@pytest.mark.parametrize(*search_space_para)
94
@pytest.mark.parametrize(*optimizers)
95
def test_best_results_1(Optimizer, search_space, objective):
96
    """Test best parameters are present in search data."""
97
    search_space = search_space
98
    objective_function = objective
99
100
    initialize = {"vertices": 2}
101
102
    hyper = Hyperactive()
103
    hyper.add_search(
104
        objective_function,
105
        search_space,
106
        optimizer=Optimizer(),
107
        n_iter=10,
108
        memory=False,
109
        initialize=initialize,
110
    )
111
    hyper.run()
112
113
    assert hyper.best_para(objective_function)["x1"] in list(
114
        hyper.search_data(objective_function)["x1"]
115
    )
116