Passed
Push — master ( 4bb434...c73ac4 )
by Simon
01:32
created

objective_function()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import time
6
import pytest
7
import random
8
import numpy as np
9
10
from gradient_free_optimizers import LipschitzOptimizer
11
from ._base_para_test import _base_para_test_func
12
from gradient_free_optimizers import RandomSearchOptimizer
13
14
15
def objective_function_nan(para):
16
    rand = random.randint(0, 1)
17
18
    if rand == 0:
19
        return 1
20
    else:
21
        return np.nan
22
23
24
def objective_function_m_inf(para):
25
    rand = random.randint(0, 1)
26
27
    if rand == 0:
28
        return 1
29
    else:
30
        return -np.inf
31
32
33
def objective_function_inf(para):
34
    rand = random.randint(0, 1)
35
36
    if rand == 0:
37
        return 1
38
    else:
39
        return np.inf
40
41
42
search_space_ = {"x1": np.arange(0, 20, 1)}
43
44
45
def objective_function(para):
46
    score = -para["x1"] * para["x1"]
47
    return score
48
49
50
search_space = {"x1": np.arange(-10, 11, 1)}
51
search_space2 = {"x1": np.arange(-10, 51, 1)}
52
search_space3 = {"x1": np.arange(-50, 11, 1)}
53
54
55
opt1 = RandomSearchOptimizer(search_space)
56
opt2 = RandomSearchOptimizer(search_space2)
57
opt3 = RandomSearchOptimizer(search_space3)
58
opt4 = RandomSearchOptimizer(search_space_)
59
opt5 = RandomSearchOptimizer(search_space_)
60
opt6 = RandomSearchOptimizer(search_space_)
61
62
opt1.search(objective_function, n_iter=30)
63
opt2.search(objective_function, n_iter=30)
64
opt3.search(objective_function, n_iter=30)
65
opt4.search(objective_function_nan, n_iter=30)
66
opt5.search(objective_function_m_inf, n_iter=30)
67
opt6.search(objective_function_inf, n_iter=30)
68
69
search_data1 = opt1.search_data
70
search_data2 = opt2.search_data
71
search_data3 = opt3.search_data
72
search_data4 = opt4.search_data
73
search_data5 = opt5.search_data
74
search_data6 = opt6.search_data
75
76
77
lipschitz_para = [
78
    ({"warm_start_smbo": None}),
79
    ({"warm_start_smbo": search_data1}),
80
    ({"warm_start_smbo": search_data2}),
81
    ({"warm_start_smbo": search_data3}),
82
    ({"warm_start_smbo": search_data4}),
83
    ({"warm_start_smbo": search_data5}),
84
    ({"warm_start_smbo": search_data6}),
85
    ({"max_sample_size": 10000000}),
86
    ({"max_sample_size": 10000}),
87
    ({"max_sample_size": 1000000000}),
88
    ({"sampling": False}),
89
    ({"sampling": {"random": 1}}),
90
    ({"sampling": {"random": 100000000}}),
91
    ({"replacement": True}),
92
    ({"replacement": False}),
93
]
94
95
96
pytest_wrapper = ("opt_para", lipschitz_para)
97
98
99
@pytest.mark.parametrize(*pytest_wrapper)
100
def test_lipschitz_para(opt_para):
101
    _base_para_test_func(opt_para, LipschitzOptimizer)
102
103
104
def test_warm_start_0():
105
    opt = LipschitzOptimizer(search_space, warm_start_smbo=search_data1)
106
107
    assert len(opt.X_sample) == 30
108