Passed
Push — master ( 4ef66c...afb360 )
by Simon
03:52
created

gradient_free_optimizers.optimizers.base_optimizer   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 24
dl 0
loc 37
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A BaseOptimizer.iter_dec() 0 6 1
A BaseOptimizer.init_pos() 0 3 1
A BaseOptimizer.move_random() 0 3 1
A BaseOptimizer.__init__() 0 6 1
A BaseOptimizer.evaluate() 0 5 1
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import numpy as np
6
from .search_tracker import SearchTracker
7
8
9
class BaseOptimizer(SearchTracker):
10
    def __init__(self, search_space):
11
        super().__init__()
12
        self.search_space = search_space
13
        self.space_dim = np.array([array.size - 1 for array in search_space])
14
15
        self.optimizers = [self]
16
17
    def move_random(self):
18
        self.pos_new = np.random.randint(self.space_dim, size=self.space_dim.shape)
19
        return self.pos_new
20
21
    def iter_dec(func):
22
        def wrapper(self, *args, **kwargs):
23
            self.nth_iter = len(self.score_new_list)
24
            return func(self, *args, **kwargs)
25
26
        return wrapper
27
28
    @iter_dec
29
    def init_pos(self, pos):
30
        self.pos_new = pos
31
32
    def evaluate(self, score_new):
33
        self.score_new = score_new
34
35
        self._evaluate_new2current(score_new)
36
        self._evaluate_current2best()
37