Passed
Pull Request — master (#233)
by Grega
01:22
created

NiaPy.task.utility.Utility.get_benchmark()   A

Complexity

Conditions 3

Size

Total Lines 17
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nop 2
dl 0
loc 17
rs 10
c 0
b 0
f 0
1
# encoding=utf8
2
# pylint: disable=no-else-return
3
4
"""Implementation of benchmarks utility function."""
5
6
from NiaPy import benchmarks
7
8
9
class Utility:
10
    r"""Base class with string mappings to benchmarks.
11
12
    Attributes:
13
        classes (Dict[str, Benchmark]): Mapping from stings to benchmark.
14
15
    """
16
17
    def __init__(self):
18
        r"""Initialize benchmarks."""
19
20
        self.benchmark_classes = {
21
            "ackley": benchmarks.Ackley,
22
            "alpine1": benchmarks.Alpine1,
23
            "alpine2": benchmarks.Alpine2,
24
            "bentcigar": benchmarks.BentCigar,
25
            "chungReynolds": benchmarks.ChungReynolds,
26
            "cosinemixture": benchmarks.CosineMixture,
27
            "csendes": benchmarks.Csendes,
28
            "discus": benchmarks.Discus,
29
            "dixonprice": benchmarks.DixonPrice,
30
            "conditionedellptic": benchmarks.Elliptic,
31
            "elliptic": benchmarks.Elliptic,
32
            "expandedgriewankplusrosenbrock": benchmarks.ExpandedGriewankPlusRosenbrock,
33
            "expandedschaffer": benchmarks.ExpandedSchaffer,
34
            "griewank": benchmarks.Griewank,
35
            "happyCat": benchmarks.HappyCat,
36
            "hgbat": benchmarks.HGBat,
37
            "infinity": benchmarks.Infinity,
38
            "katsuura": benchmarks.Katsuura,
39
            "levy": benchmarks.Levy,
40
            "michalewicz": benchmarks.Michalewichz,
41
            "modifiedscwefel": benchmarks.ModifiedSchwefel,
42
            "perm": benchmarks.Perm,
43
            "pinter": benchmarks.Pinter,
44
            "powell": benchmarks.Powell,
45
            "qing": benchmarks.Qing,
46
            "quintic": benchmarks.Quintic,
47
            "rastrigin": benchmarks.Rastrigin,
48
            "ridge": benchmarks.Ridge,
49
            "rosenbrock": benchmarks.Rosenbrock,
50
            "salomon": benchmarks.Salomon,
51
            "schaffer2": benchmarks.SchafferN2,
52
            "schaffer4": benchmarks.SchafferN4,
53
            "schumerSteiglitz": benchmarks.SchumerSteiglitz,
54
            "schwefel": benchmarks.Schwefel,
55
            "schwefel221": benchmarks.Schwefel221,
56
            "schwefel222": benchmarks.Schwefel222,
57
            "sphere": benchmarks.Sphere,
58
            "sphere2": benchmarks.Sphere2,
59
            "sphere3": benchmarks.Sphere3,
60
            "step": benchmarks.Step,
61
            "step2": benchmarks.Step2,
62
            "step3": benchmarks.Step3,
63
            "stepint": benchmarks.Stepint,
64
            "styblinskiTang": benchmarks.StyblinskiTang,
65
            "sumSquares": benchmarks.SumSquares,
66
            "trid": benchmarks.Trid,
67
            "weierstrass": benchmarks.Weierstrass,
68
            "whitley": benchmarks.Whitley,
69
            "zakharov": benchmarks.Zakharov
70
        }
71
72
        self.algorithm_classes = {}
73
74
    def get_benchmark(self, benchmark):
75
        r"""Get the optimization problem.
76
77
        Arguments:
78
            benchmark (Union[str, Benchmark]): String or class that represents the optimization problem.
79
80
        Returns:
81
            Benchmark: Optimization function with limits.
82
83
        """
84
85
        if issubclass(type(benchmark), benchmarks.Benchmark):
86
            return benchmark
87
        elif benchmark in self.benchmark_classes.keys():
88
            return self.benchmark_classes[benchmark]()
89
        else:
90
            raise TypeError("Passed benchmark is not defined!")
91
92
    @classmethod
93
    def __raiseLowerAndUpperNotDefined(cls):
94
        r"""Trow exception if lower and upper bounds are not defined in benchmark.
95
96
        Raises:
97
            TypeError: Type error.
98
99
        """
100
101
        raise TypeError("Upper and Lower value must be defined!")
102