Passed
Push — master ( b3cc5b...cdf567 )
by Simon
01:59
created

Candidate.eval_pos_noMem()   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 2
rs 10
c 0
b 0
f 0
cc 1
nop 2
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
import time
6
import numpy as np
7
8
from ..search_space import SearchSpace
9
from ..model import Model
10
from ..init_position import InitSearchPosition
11
from ..extensions.memory import ShortTermMemory, LongTermMemory
12
13
14
class Candidate:
15
    def __init__(self, nth_process, _main_args_):
16
        self.start_time = time.time()
17
        self.i = 0
18
        self._main_args_ = _main_args_
19
        self.memory = _main_args_.memory
20
21
        self._score_best = -np.inf
22
        self.pos_best = None
23
        self.model = None
24
25
        self.nth_process = nth_process
26
        model_nr = nth_process % _main_args_.n_models
27
        self.func_ = list(_main_args_.search_config.keys())[model_nr]
28
        self._space_ = SearchSpace(_main_args_, model_nr)
29
        self.func_name = str(self.func_).split(" ")[1]
30
        self._model_ = Model(self.func_, nth_process, _main_args_)
31
        self._init_ = InitSearchPosition(self._space_, self._model_, _main_args_)
32
33
        self.eval_time = []
34
35
        if not self.memory:
36
            self.mem = None
37
            self.eval_pos = self.eval_pos_noMem
38
39
        elif self.memory == "short":
40
            self.mem = ShortTermMemory(self._space_, _main_args_, self)
41
            self.eval_pos = self.eval_pos_Mem
42
43
        elif self.memory == "long":
44
            self.mem = LongTermMemory(self._space_, _main_args_, self)
45
            self.eval_pos = self.eval_pos_Mem
46
47
            self.mem.load_memory(self.func_)
48
49
        else:
50
            print("Warning: Memory not defined")
51
            self.mem = None
52
            self.eval_pos = self.eval_pos_noMem
53
54
        if self.mem:
55
            if self.mem.meta_data_found:
56
                self.pos_best = self.mem.pos_best
57
                self.score_best = self.mem.score_best
58
59
        self.pos_best = self._init_._set_start_pos()
60
        self.score_best = self.eval_pos(self.pos_best)
61
62
    def _get_warm_start(self):
63
        return self._space_.pos2para(self.pos_best)
64
65
    def _process_results(self, _verb_, _opt_args_):
66
        self.total_time = time.time() - self.start_time
67
        start_point = _verb_.print_start_point(self)
68
69
        if self._main_args_.memory == "long":
70
            self.mem.save_memory(self._main_args_, _opt_args_, self)
71
72
        return start_point
73
74
    @property
75
    def score_best(self):
76
        return self._score_best
77
78
    @score_best.setter
79
    def score_best(self, value):
80
        self.model_best = self.model
81
        self._score_best = value
82
83
    def base_eval(self, pos):
84
        para = self._space_.pos2para(pos)
85
        para["iteration"] = self.i
86
        score, eval_time, self.model = self._model_.train_model(para)
87
        self.eval_time.append(eval_time)
88
89
        return score
90
91
    def eval_pos_noMem(self, pos):
92
        return self.base_eval(pos)
93
94
    def eval_pos_Mem(self, pos, force_eval=False):
95
        pos.astype(int)
96
        pos_str = pos.tostring()
97
98
        if pos_str in self.mem.memory_dict and not force_eval:
99
            return self.mem.memory_dict[pos_str]
100
        else:
101
            score = self.base_eval(pos)
102
            self.mem.memory_dict[pos_str] = score
103
104
            return score
105