Passed
Push — master ( 79bd2c...57729f )
by Simon
01:39
created

gradient_free_optimizers._objective_functions._ackley_function   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 20
dl 0
loc 27
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A AckleyFunction.search_space() 0 5 1
A AckleyFunction.objective_function() 0 10 1
A AckleyFunction.__init__() 0 3 1
1
import numpy as np
2
3
from ._base_function import BaseFunction
4
5
6
class AckleyFunction(BaseFunction):
7
    def __init__(self):
8
        self.A = 20
9
        self.angle = 2 * np.pi
10
11
    def objective_function(self, para):
12
        x = para["x0"]
13
        y = para["x1"]
14
15
        loss1 = -self.A * np.exp(-0.2 * np.sqrt(0.5 * (x * x + y * y)))
16
        loss2 = -np.exp(0.5 * (np.cos(self.angle * x) + np.cos(self.angle * y)))
17
        loss3 = np.exp(1)
18
        loss4 = self.A
19
20
        return loss1 + loss2 + loss3 + loss4
21
22
    @property
23
    def search_space(self):
24
        return {
25
            "x0": np.arange(-5, 5, 0.1),
26
            "x1": np.arange(-5, 5, 0.1),
27
        }
28