Passed
Push — master ( 626f23...be3b1e )
by Simon
01:48
created

gradient_free_optimizers.optimizers.global_opt.random_restart_hill_climbing   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 27
dl 0
loc 40
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A RandomRestartHillClimbingOptimizer.iterate() 0 12 3
A RandomRestartHillClimbingOptimizer.__init__() 0 14 1
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
6
from ..local_opt import HillClimbingOptimizer
7
from ...search import Search
8
9
10
class RandomRestartHillClimbingOptimizer(HillClimbingOptimizer, Search):
11
    name = "Random Restart Hill Climbing"
12
13
    def __init__(
14
        self,
15
        *args,
16
        epsilon=0.03,
17
        distribution="normal",
18
        n_neighbours=3,
19
        n_iter_restart=10,
20
        **kwargs,
21
    ):
22
        super().__init__(*args, **kwargs)
23
        self.epsilon = epsilon
24
        self.distribution = distribution
25
        self.n_neighbours = n_neighbours
26
        self.n_iter_restart = n_iter_restart
27
28
    @HillClimbingOptimizer.track_nth_iter
29
    @HillClimbingOptimizer.random_restart
30
    def iterate(self):
31
        notZero = self.nth_iter != 0
32
        modZero = self.nth_iter % self.n_iter_restart == 0
33
34
        if notZero and modZero:
35
            pos = self.move_random()
36
        else:
37
            pos = self._move_climb(self.pos_current)
38
39
        return pos
40