Passed
Push — master ( 13200e...4b50d2 )
by Simon
04:24
created

ProgressBarBase.best_since_iter()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nop 2
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 numpy as np
6
from tqdm import tqdm
7
8
9
class ProgressBarBase:
10
    def __init__(self, nth_process, n_iter, objective_function):
11
        self._score_best = -np.inf
12
        self.score_best_list = []
13
14
        self.convergence_data = []
15
16
        self._best_since_iter = 0
17
        self.best_since_iter_list = []
18
19
        self.objective_function = objective_function
20
21
        self.n_iter_current = 0
22
23
    @property
24
    def score_best(self):
25
        return self._score_best
26
27
    @score_best.setter
28
    def score_best(self, score):
29
        self.score_best_list.append(score)
30
        self._score_best = score
31
32
    @property
33
    def best_since_iter(self):
34
        return self._best_since_iter
35
36
    @best_since_iter.setter
37
    def best_since_iter(self, nth_iter):
38
        self.best_since_iter_list.append(nth_iter)
39
        self._best_since_iter = nth_iter
40
41
    def _new2best(self, score_new, pos_new, nth_iter):
42
        if score_new > self.score_best:
43
            self.score_best = score_new
44
            self.pos_best = pos_new
45
            self.best_since_iter = nth_iter
46
47
        self.convergence_data.append(self.score_best)
48
49
50
class ProgressBarLVL0(ProgressBarBase):
51
    def __init__(self, nth_process, n_iter, objective_function):
52
        super().__init__(nth_process, n_iter, objective_function)
53
54
    def update(self, score_new, pos_new, nth_iter):
55
        self.n_iter_current = nth_iter
56
        self._new2best(score_new, pos_new, nth_iter)
57
58
    def close(self):
59
        pass
60
61
62
class ProgressBarLVL1(ProgressBarBase):
63
    def __init__(self, nth_process, n_iter, objective_function):
64
        super().__init__(nth_process, n_iter, objective_function)
65
        self._tqdm = tqdm(
66
            **self._tqdm_dict(nth_process, n_iter, objective_function)
67
        )
68
69
    def update(self, score_new, pos_new, nth_iter):
70
        self.n_iter_current = nth_iter
71
72
        self._new2best(score_new, pos_new, nth_iter)
73
74
        if score_new > self.score_best:
75
            self._tqdm.set_postfix(
76
                best_score=str(score_new),
77
                best_pos=str(pos_new),
78
                best_iter=str(self._best_since_iter),
79
            )
80
81
        self._tqdm.update(1)
82
        # self._tqdm.refresh()
83
84
    def close(self):
85
        self._tqdm.close()
86
87
    def _tqdm_dict(self, nth_process, n_iter, objective_function):
88
        """Generates the parameter dict for tqdm in the iteration-loop of each optimizer"""
89
90
        self.objective_function = objective_function
91
92
        if nth_process is None:
93
            process_str = ""
94
        else:
95
            process_str = "Process " + str(nth_process)
96
97
        return {
98
            "total": n_iter,
99
            "desc": process_str,
100
            "position": nth_process,
101
            "leave": False,
102
            # "smoothing": 1.0,
103
        }
104
105