Passed
Pull Request — master (#19)
by
unknown
01:00
created

Ackley.evaluate()   A

Complexity

Conditions 2

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 20
rs 9.4285
cc 2
1
"""Implementation of Ackley function."""
2
import math
3
4
__all__ = ['Ackley']
5
6
7
class Ackley(object):
8
9
    @classmethod
10
    def function(cls):
11
        def evaluate(D, sol):
12
13
            a = 20  # Recommended variable value
14
            b = 0.2  # Recommended variable value
15
            c = 2 * math.pi  # Recommended variable value
16
17
            val = 0.0
18
            val1 = 0.0
19
            val2 = 0.0
20
21
            for i in range(D):
22
                val1 += math.pow(sol[i], 2)
23
                val2 += math.cos(c * sol[i])
24
25
            temp1 = -b * math.sqrt(val1/D)
26
            temp2 = val2/D
27
28
            val = -a * math.exp(temp1) - math.exp(temp2) + a + math.exp(1)
29
30
            return val
31
32
        return evaluate
33