Passed
Pull Request — master (#206)
by Grega
01:38
created

NiaPy.algorithms.utility   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 166
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 140
dl 0
loc 166
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
B AlgorithmUtility.__init__() 0 67 1
A AlgorithmUtility.get_algorithm() 0 16 3
1
from NiaPy.algorithms import Algorithm
2
from NiaPy.algorithms.basic import (
3
    BatAlgorithm,
4
    FireflyAlgorithm,
5
    DifferentialEvolution,
6
    CrowdingDifferentialEvolution,
7
    AgingNpDifferentialEvolution,
8
    DynNpDifferentialEvolution,
9
    MultiStrategyDifferentialEvolution,
10
    DynNpMultiStrategyDifferentialEvolution,
11
    multiMutations,
12
    AgingNpMultiMutationDifferentialEvolution,
13
    FlowerPollinationAlgorithm,
14
    GreyWolfOptimizer,
15
    GeneticAlgorithm,
16
    ArtificialBeeColonyAlgorithm,
17
    ParticleSwarmAlgorithm,
18
    BareBonesFireworksAlgorithm,
19
    CamelAlgorithm,
20
    MonkeyKingEvolutionV1,
21
    MonkeyKingEvolutionV2,
22
    MonkeyKingEvolutionV3,
23
    EvolutionStrategy1p1,
24
    EvolutionStrategyMp1,
25
    EvolutionStrategyMpL,
26
    EvolutionStrategyML,
27
    CovarianceMatrixAdaptionEvolutionStrategy,
28
    SineCosineAlgorithm,
29
    GlowwormSwarmOptimization,
30
    GlowwormSwarmOptimizationV1,
31
    GlowwormSwarmOptimizationV2,
32
    GlowwormSwarmOptimizationV3,
33
    HarmonySearch,
34
    HarmonySearchV1,
35
    KrillHerdV1,
36
    KrillHerdV2,
37
    KrillHerdV3,
38
    KrillHerdV4,
39
    KrillHerdV11,
40
    FireworksAlgorithm,
41
    EnhancedFireworksAlgorithm,
42
    DynamicFireworksAlgorithm,
43
    DynamicFireworksAlgorithmGauss,
44
    GravitationalSearchAlgorithm,
45
    MothFlameOptimizer,
46
    FishSchoolSearch,
47
    CuckooSearch,
48
    CoralReefsOptimization,
49
    ForestOptimizationAlgorithm
50
)
51
from NiaPy.algorithms.modified import (
52
    HybridBatAlgorithm,
53
    DifferentialEvolutionMTS,
54
    DifferentialEvolutionMTSv1,
55
    DynNpDifferentialEvolutionMTS,
56
    DynNpDifferentialEvolutionMTSv1,
57
    MultiStrategyDifferentialEvolutionMTS,
58
    MultiStrategyDifferentialEvolutionMTSv1,
59
    SelfAdaptiveDifferentialEvolution,
60
    DynNpSelfAdaptiveDifferentialEvolutionAlgorithm,
61
    MultiStrategySelfAdaptiveDifferentialEvolution,
62
    AgingSelfAdaptiveDifferentialEvolution
63
)
64
from NiaPy.algorithms.other import (
65
    NelderMeadMethod,
66
    HillClimbAlgorithm,
67
    SimulatedAnnealing,
68
    MultipleTrajectorySearch,
69
    MultipleTrajectorySearchV1
70
)
71
72
73
class AlgorithmUtility:
74
    r"""Base class with string mappings to algorithms.
75
76
    Attributes:
77
        classes (Dict[str, Algorithm]): Mapping from stings to algorithms.
78
79
    """
80
81
    def __init__(self):
82
        r"""Initialize the algorithms."""
83
84
        self.algorithm_classes = {
85
            "BatAlgorithm": BatAlgorithm,
86
            "FireflyAlgorithm": FireflyAlgorithm,
87
            "DifferentialEvolution": DifferentialEvolution,
88
            "CrowdingDifferentialEvolution": CrowdingDifferentialEvolution,
89
            "AgingNpDifferentialEvolution": AgingNpDifferentialEvolution,
90
            "DynNpDifferentialEvolution": DynNpDifferentialEvolution,
91
            "MultiStrategyDifferentialEvolution": MultiStrategyDifferentialEvolution,
92
            "DynNpMultiStrategyDifferentialEvolution": DynNpMultiStrategyDifferentialEvolution,
93
            "multiMutations": multiMutations,
94
            "AgingNpMultiMutationDifferentialEvolution": AgingNpMultiMutationDifferentialEvolution,
95
            "FlowerPollinationAlgorithm": FlowerPollinationAlgorithm,
96
            "GreyWolfOptimizer": GreyWolfOptimizer,
97
            "GeneticAlgorithm": GeneticAlgorithm,
98
            "ArtificialBeeColonyAlgorithm": ArtificialBeeColonyAlgorithm,
99
            "ParticleSwarmAlgorithm": ParticleSwarmAlgorithm,
100
            "BareBonesFireworksAlgorithm": BareBonesFireworksAlgorithm,
101
            "CamelAlgorithm": CamelAlgorithm,
102
            "MonkeyKingEvolutionV1": MonkeyKingEvolutionV1,
103
            "MonkeyKingEvolutionV2": MonkeyKingEvolutionV2,
104
            "MonkeyKingEvolutionV3": MonkeyKingEvolutionV3,
105
            "EvolutionStrategy1p1": EvolutionStrategy1p1,
106
            "EvolutionStrategyMp1": EvolutionStrategyMp1,
107
            "EvolutionStrategyMpL": EvolutionStrategyMpL,
108
            "EvolutionStrategyML": EvolutionStrategyML,
109
            "CovarianceMatrixAdaptionEvolutionStrategy": CovarianceMatrixAdaptionEvolutionStrategy,
110
            "SineCosineAlgorithm": SineCosineAlgorithm,
111
            "GlowwormSwarmOptimization": GlowwormSwarmOptimization,
112
            "GlowwormSwarmOptimizationV1": GlowwormSwarmOptimizationV1,
113
            "GlowwormSwarmOptimizationV2": GlowwormSwarmOptimizationV2,
114
            "GlowwormSwarmOptimizationV3": GlowwormSwarmOptimizationV3,
115
            "HarmonySearch": HarmonySearch,
116
            "HarmonySearchV1": HarmonySearchV1,
117
            "KrillHerdV1": KrillHerdV1,
118
            "KrillHerdV2": KrillHerdV2,
119
            "KrillHerdV3": KrillHerdV3,
120
            "KrillHerdV4": KrillHerdV4,
121
            "KrillHerdV11": KrillHerdV11,
122
            "FireworksAlgorithm": FireworksAlgorithm,
123
            "EnhancedFireworksAlgorithm": EnhancedFireworksAlgorithm,
124
            "DynamicFireworksAlgorithm": DynamicFireworksAlgorithm,
125
            "DynamicFireworksAlgorithmGauss": DynamicFireworksAlgorithmGauss,
126
            "GravitationalSearchAlgorithm": GravitationalSearchAlgorithm,
127
            "MothFlameOptimizer": MothFlameOptimizer,
128
            "FishSchoolSearch": FishSchoolSearch,
129
            "CuckooSearch": CuckooSearch,
130
            "CoralReefsOptimization": CoralReefsOptimization,
131
            "ForestOptimizationAlgorithm": ForestOptimizationAlgorithm,
132
            "HybridBatAlgorithm": HybridBatAlgorithm,
133
            "DifferentialEvolutionMTS": DifferentialEvolutionMTS,
134
            "DifferentialEvolutionMTSv1": DifferentialEvolutionMTSv1,
135
            "DynNpDifferentialEvolutionMTS": DynNpDifferentialEvolutionMTS,
136
            "DynNpDifferentialEvolutionMTSv1": DynNpDifferentialEvolutionMTSv1,
137
            "MultiStrategyDifferentialEvolutionMTS": MultiStrategyDifferentialEvolutionMTS,
138
            "MultiStrategyDifferentialEvolutionMTSv1": MultiStrategyDifferentialEvolutionMTSv1,
139
            "SelfAdaptiveDifferentialEvolution": SelfAdaptiveDifferentialEvolution,
140
            "DynNpSelfAdaptiveDifferentialEvolutionAlgorithm": DynNpSelfAdaptiveDifferentialEvolutionAlgorithm,
141
            "MultiStrategySelfAdaptiveDifferentialEvolution": MultiStrategySelfAdaptiveDifferentialEvolution,
142
            "AgingSelfAdaptiveDifferentialEvolution": AgingSelfAdaptiveDifferentialEvolution,
143
            "NelderMeadMethod": NelderMeadMethod,
144
            "HillClimbAlgorithm": HillClimbAlgorithm,
145
            "SimulatedAnnealing": SimulatedAnnealing,
146
            "MultipleTrajectorySearch": MultipleTrajectorySearch,
147
            "MultipleTrajectorySearchV1": MultipleTrajectorySearchV1
148
        }
149
150
    def get_algorithm(self, algorithm):
151
        r"""Get the algorithm.
152
153
        Arguments:
154
            algorithm (Union[str, Algorithm]): String or class that represents the algorithm.
155
156
        Returns:
157
            Algorithm: Instance of an Algorithm.
158
        """
159
160
        if issubclass(type(algorithm), Algorithm):
161
            return algorithm
162
        elif algorithm in self.algorithm_classes:
163
            return self.algorithm_classes[algorithm]()
164
        else:
165
            raise TypeError("Passed algorithm is not defined!")
166