Passed
Push — master ( 268666...521b2e )
by Simon
01:18
created

BaseOptimizer.__init__()   A

Complexity

Conditions 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nop 3
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import random
6
import numpy as np
7
from .search_tracker import SearchTracker
8
9
10
class BaseOptimizer(SearchTracker):
11
    def __init__(self, search_space, rand_rest_p=0):
12
        super().__init__()
13
        self.search_space = search_space
14
        self.space_dim_size = np.array(
15
            [len(array) for array in search_space.values()]
16
        )
17
        self.rand_rest_p = rand_rest_p
18
19
        self.optimizers = [self]
20
21
    def move_random(self):
22
        self.pos_new = np.random.randint(
23
            self.space_dim_size, size=self.space_dim_size.shape
24
        )
25
        return self.pos_new
26
27
    def track_nth_iter(func):
28
        def wrapper(self, *args, **kwargs):
29
            self.nth_iter = len(self.score_new_list)
30
            return func(self, *args, **kwargs)
31
32
        return wrapper
33
34
    def random_restart(func):
35
        def wrapper(self, *args, **kwargs):
36
            if self.rand_rest_p > random.uniform(0, 1):
37
                return self.move_random()
38
            else:
39
                return func(self, *args, **kwargs)
40
41
        return wrapper
42
43
    @track_nth_iter
44
    def init_pos(self, pos):
45
        self.pos_new = pos
46
47
    def evaluate(self, score_new):
48
        self.score_new = score_new
49
50
        self._evaluate_new2current(score_new)
51
        self._evaluate_current2best()
52