Passed
Push — master ( 7ebd63...8bd9a3 )
by Simon
06:11
created

gradient_free_optimizers.optimizer_search.differential_evolution   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 68
Duplicated Lines 80.88 %

Importance

Changes 0
Metric Value
wmc 1
eloc 29
dl 55
loc 68
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A DifferentialEvolutionOptimizer.__init__() 24 24 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
from typing import List, Dict, Literal, Literal
6
7
from ..search import Search
8
from ..optimizers import (
9
    DifferentialEvolutionOptimizer as _DifferentialEvolutionOptimizer,
10
)
11
12
13 View Code Duplication
class DifferentialEvolutionOptimizer(_DifferentialEvolutionOptimizer, Search):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
14
    """
15
    A class implementing the **differential evolution** for the public API.
16
    Inheriting from the `Search`-class to get the `search`-method and from
17
    the `DifferentialEvolutionOptimizer`-backend to get the underlying algorithm.
18
19
    Parameters
20
    ----------
21
    search_space : dict[str, list]
22
        The search space to explore. A dictionary with parameter
23
        names as keys and a numpy array as values.
24
    initialize : dict[str, int]
25
        The method to generate initial positions. A dictionary with
26
        the following key literals and the corresponding value type:
27
        {"grid": int, "vertices": int, "random": int, "warm_start": list[dict]}
28
    constraints : list[callable]
29
        A list of constraints, where each constraint is a callable.
30
        The callable returns `True` or `False` dependend on the input parameters.
31
    random_state : None, int
32
        If None, create a new random state. If int, create a new random state
33
        seeded with the value.
34
    rand_rest_p : float
35
        The probability of a random iteration during the the search process.
36
    population  : int
37
        The number of individuals in the population.
38
    mutation_rate : float
39
        The mutation rate.
40
    crossover_rate : float
41
        The crossover rate.
42
    """
43
44
    def __init__(
45
        self,
46
        search_space: Dict[str, list],
47
        initialize: Dict[
48
            Literal["grid", "vertices", "random", "warm_start"], int | List
49
        ] = {"grid": 4, "random": 2, "vertices": 4},
50
        constraints: List[callable] = [],
51
        random_state: int = None,
52
        rand_rest_p: float = 0,
53
        nth_process: int = None,
54
        population=10,
55
        mutation_rate=0.9,
56
        crossover_rate=0.9,
57
    ):
58
        super().__init__(
59
            search_space=search_space,
60
            initialize=initialize,
61
            constraints=constraints,
62
            random_state=random_state,
63
            rand_rest_p=rand_rest_p,
64
            nth_process=nth_process,
65
            population=population,
66
            mutation_rate=mutation_rate,
67
            crossover_rate=crossover_rate,
68
        )
69