1
|
|
|
"""Contain PsoAlgorithm.""" |
2
|
|
|
# pylint: disable=redefined-variable-type |
|
|
|
|
3
|
1 |
|
from grortir.main.model.core.optimization_status import OptimizationStatus |
4
|
1 |
|
from grortir.main.pso.process_validator import ProcessValidator |
5
|
1 |
|
from grortir.main.pso.whole_group_pso import WholeGroupPso |
6
|
|
|
|
7
|
|
|
|
8
|
1 |
|
class PsoAlgorithm: |
9
|
|
|
"""Optimize process with different strategies. |
10
|
|
|
|
11
|
|
|
Attributes: |
12
|
|
|
process (AbstractProcess): process |
13
|
|
|
""" |
14
|
|
|
|
15
|
1 |
|
def __init__(self, process, grouping_strategy, optimization_startegy, |
16
|
|
|
number_of_particle=40): |
17
|
1 |
|
self.process = process |
18
|
1 |
|
self.grouping_strategy = grouping_strategy |
19
|
1 |
|
self.optimization_strategy = optimization_startegy |
20
|
1 |
|
self.process_validator = ProcessValidator() |
21
|
1 |
|
self.whole_group_pso = WholeGroupPso(self.process, number_of_particle) |
22
|
|
|
|
23
|
1 |
|
def run(self): |
24
|
|
|
"""Run algorithm.""" |
25
|
1 |
|
self.process_validator.validate(self.process) |
26
|
1 |
|
self.process.optimizationStatus = OptimizationStatus.in_progress |
27
|
1 |
|
number_of_groups = self.grouping_strategy.get_actual_numbers_of_groups() |
28
|
1 |
|
for current_group_number in range(number_of_groups): |
29
|
1 |
|
current_stages = self.grouping_strategy.get_items_from_group( |
30
|
|
|
current_group_number) |
31
|
1 |
|
group_optimization_strategy = self.optimization_strategy. \ |
32
|
|
|
get_group_optimization_strategy(current_stages) |
33
|
1 |
|
self.whole_group_pso.optimize(current_stages, |
34
|
|
|
group_optimization_strategy) |
35
|
1 |
|
self._post_processing() |
36
|
|
|
|
37
|
1 |
|
def _post_processing(self): |
|
|
|
|
38
|
1 |
|
final_status = OptimizationStatus.success |
39
|
1 |
|
for stage in self.grouping_strategy.ordered_stages: |
40
|
1 |
|
if stage.optimization_status != OptimizationStatus.success: |
41
|
1 |
|
final_status = OptimizationStatus.failed |
42
|
|
|
self.process.optimization_status = final_status |
43
|
|
|
|