1 | """Module contains class CallsStage.""" |
||
2 | 1 | from grortir.main.model.core.abstract_stage import AbstractStage |
|
3 | |||
4 | |||
5 | 1 | class CallsStage(AbstractStage): |
|
6 | """Implementation of basic stage. |
||
7 | |||
8 | Cost is calculated by number of calls of cost function. |
||
9 | Attributes: |
||
10 | cost (float): Actual cost of stage. |
||
11 | max_calls (int): Maximum possible calls of cost quality function |
||
12 | name (str): Name of stage |
||
13 | maximum_acceptable_quality (float): max expected quality |
||
14 | """ |
||
15 | |||
16 | 1 | def __init__(self, name, max_calls, input_vector=(), |
|
17 | maximum_acceptable_quality=1e-8): |
||
18 | """Constructor.""" |
||
19 | 1 | super().__init__(input_vector) |
|
20 | 1 | self.max_calls = max_calls |
|
21 | 1 | self.name = name |
|
22 | 1 | self.control_params = [0] * len(self.input_vector) |
|
23 | 1 | self.maximum_acceptable_quality = maximum_acceptable_quality |
|
24 | 1 | self.cost = 0 |
|
25 | |||
26 | 1 | def get_quality(self, control_params=None): |
|
27 | """ |
||
28 | Return quality of actual output. |
||
29 | |||
30 | Returns: |
||
31 | quality (float): quality |
||
32 | |||
33 | """ |
||
34 | 1 | if control_params is None: |
|
35 | 1 | control_params = self.control_params[:] |
|
36 | 1 | self.cost += 1 |
|
37 | 1 | return self.calculate_quality(control_params) |
|
38 | |||
39 | 1 | def calculate_quality(self, control_params): |
|
40 | """ |
||
41 | Function for calculating quality. |
||
42 | |||
43 | Returns: |
||
44 | quality (float): quality |
||
45 | |||
46 | Raises: |
||
47 | AssertionError: If length of `control_params` |
||
48 | is not equal length of `current_vector` |
||
49 | """ |
||
50 | 1 | assert len(control_params) == len(self.current_vector) |
|
51 | 1 | quality = 0 |
|
52 | 1 | for i in enumerate(control_params): |
|
53 | 1 | quality += (control_params[i[0]] - self.current_vector[ |
|
54 | i[0]]) ** 2 |
||
55 | 1 | return quality |
|
56 | |||
57 | 1 | def get_cost(self): |
|
58 | """ |
||
59 | Return actual cost of stage. |
||
60 | |||
61 | Returns: |
||
62 | cost (float): cost |
||
63 | """ |
||
64 | 1 | return self.cost |
|
65 | |||
66 | 1 | def could_be_optimized(self): |
|
67 | """Return answer if it is still possible to optimize that stage.""" |
||
68 | 1 | return self.get_cost() < self.max_calls |
|
69 | |||
70 | 1 | def is_enough_quality(self, value): |
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
71 | """Return True if value is proper quality.""" |
||
72 | 1 | return value <= self.maximum_acceptable_quality |
|
73 | |||
74 | 1 | def get_output_of_stage(self): |
|
0 ignored issues
–
show
|
|||
75 | """Return output of stage.""" |
||
76 | return None |
||
77 |