# Estrategias Evolutivas

La librería **Pyristic** incluye una clase llamada *EvolutionStrategy*  inspirada en la metaheurística de *Estrategias evolutivas* (EE) para resolver problemas de minimización. Para trabajar con esta clase se requiere hacer lo siguiente:

1. Definir:
    * La función objetivo $f$.
    * La lista de restricciones.
    * Lista de límites inferiores y superiores.
    * Configuración de operadores de la metaheurística (opcional).

2. Crear una clase que hereda de *EvolutionStrategy*.

3. Sobreescritura de funciones auxiliares:

    * initialize_step_weights (opcional)
    * initialize_population (opcional)
    * fixer (opcional)
    * mutation_operator (opcional)
    * crossover_operator (opcional)
    * adaptive_crossover (opcional)
    * adaptive_mutation (opcional)
    * survivor_selection (opcional)

A continuación se mostrarán los elementos que se deben importar.

```python
import sys
import os

#library_path is the path where the Optimpy library is located.
library_path = "/home/dell/Documentos/Git_proejcts/optimizacion-con-metaheuristicas/"
#library_path = "/Users/adrianamenchacamendez/Documentos/enes_morelia/papime/optimizacion-con-metaheuristicas/"
sys.path.append(os.path.abspath(library_path))

```

```python
from pprint import pprint
import math
import numpy as np
import copy
from IPython.display import Image
from IPython.core.display import HTML
```

```python
from optimpy.heuristic.EvolutionStrategy_search import EvolutionStrategy
from optimpy.utils.operators import selection, mutation, crossover
from optimpy.utils.test_function import beale_, ackley_
from optimpy.utils.helpers import EvolutionStrategyConfig,get_stats

```

Para ejemplificar el uso de la clase *EvolutionStrategy*,  resolveremos dos problemas de optimización continua. Estos problemas se encuentran implementados en **utils.helpers.test_function**.

## Función de Beale
\begin{equation}
  \label{eq:BF}
  \begin{array}{rll}
  \text{minimizar:} & f(x_1, x_2) = (1.5 - x_1 + x_1x_2)^2 + (2.25 - x_1 + x_1x_2^2)^2 + (2.625 - x_1 + x_1x_2^3)^2
  &  \\
  \text{Tal que: } & -4.5 \leq x_1,x_2 \leq 4.5 &
  \end{array}
\end{equation}

El mínimo global se encuentra en $x^* = (3, 0.5)$ y $f(x^*) = 0$.

```python
Image(filename="include/beale.png", width=500, height=300)
```

```python
beale_
```

    {'function': CPUDispatcher(<function beale_function at 0x7fc8c4126378>),
     'constraints': [CPUDispatcher(<function constraint1_beale at 0x7fc8cc408510>)],
     'bounds': [-4.5, 4.5],
     'decision_variables': 2}

### Clase EvolutionStrategy
Para hacer uso de la metaheurística EE implementada en la librería de **Pyristic** se puede hacer lo siguiente.

* Crear un objeto de tipo *EvolutionStrategy* y mandar a llamar a su método *optimize*. En este caso se utilizan los operadores y parámetros por defecto.
* Crear una clase que herede de la clase *EvolutionStrategy* y sobreescribir los métodos.
* Declarar un objeto del tipo *EvolutionStrategyConfig* (ubicado en *utils.helpers*) y ajustar los operadores.
* Realizar una combinación de las dos antes mencionadas.

#### Métodos
Los métodos que contiene la clase EvolutionStrategy son:

* **fixer**. Si la solución no está dentro de los límites (restricciones de caja), actualiza el valor de la variable con el valor del límite que rebasó. De lo contrario, regresa la misma solución.

 Argumentos:
  * **ind**. Índice del individuo.

 Valor de retorno:
  * Un arreglo de *numpy* representado a la solución que reemplazará la solución infactible.

* **initialize_population**. Crea una población de individuos aleatorios. Para ello se generan números aleatorios, utilizando una distribución uniforme, dentro de los límites indicados para cada variable. Los individuos generados son almacenados en logger con la llave de `parent_population_x`. Esta función es llamada dentro de la función *optimize*.

 Valor de retorno:
   * Un arreglo bidimensional de *numpy*. El número de filas es igual al tamaño de la población y el número de columnas es igual al número de variables que tiene el problema que se está resolviendo.

* **initialize_step_weights.** Inicializa el tamaño de desplazamiento de cada una de las variables de decisión pertenecientes a cada individuo de la población. Para ello se generan números aleatorio en el intervalo $[0,1]$, utilizando una distribución uniforme. Los tamaños de desplazamiento están almacenados en logger con la llave `parent_population_sigma`.

    Valor de retorno:
     * Un arreglo bidimensional de numpy. El número de filas es igual al tamaño de la población y el número de columnas es igual al número de variables que tiene el problema que se está resolviendo. Cada variable tiene su propio tamaño de paso.

* **mutation_operator**, Muta las variables de decisión, las cuales se encuentran almacenadas en el diccionario logger con la llave `parent_population_x`. La mutación se realiza de la siguiente forma:

    \begin{equation}
      \label{eq:mutarVariables}
      x'_i = x_i + \sigma'_i \cdot N(0, 1)
    \end{equation}

  donde $x'_j$ es la variable mutada, $x_j$ la variable a mutar, $\sigma'_j$ el tamaño de paso (previamente mutado) y N(0,1) devuelve un número aleatorio usando una distribución normal con media $0$ y desviación estándar igual con $1$.

  Es importante tener en cuenta que la fila $j$ de `parent_population_x` debe corresponder con la fila $j$ de `parent_population_sigma`.

  Valor de retorno:
   * Un arreglo bidimensional de numpy representado a los nuevos individuos.

* **adaptive_mutation.**  Muta los tamaños de paso, los cuales se encuentran almacenados en el diccionario logger con la llave `offspring_population_sigma`. Actualmente, la librería **Pyristic** cuenta con dos métodos para la actualización de los tamaños de paso, los métodos se encuentran en *utils.operators.mutation*.

  Los métodos de mutación para sigma son:
   * *sigma_mult_adaptive_mutator.* Crea una variable de desplazamiento por cada variable de decisión de cada individuo.
   * *sigma_single_adaptive_mutator.* Crea una sola variable de desplazamiento por cada individuo de la población.

 Por defecto la metaheurística utiliza *sigma_mult_adaptive_mutator*, la forma en que opera es:
    \begin{equation*}
      \label{eq:mutarNSigmas}
      \sigma'_i = \sigma_i \cdot e ^ {\tau' \cdot N(0,1) + \tau \cdot N_i(0,1)}
    \end{equation*}

* **crossover_operator.** Genera la población de nuevos individuos trás la cruza de cada dos inviduos de la población en dicha generación. Estos nuevos individuos son almacenandos en logger con la llave `offspring_population_x`.

    Argumentos:
     * **parent_ind1.** Indices de los individuos que son seleccionados para emplear el operador de cruza.
     * **parent_ind2.** Indices de los individuos que son seleccionados para emplear el operador de cruza.

 Valor de retorno:
     * Un arreglo bidimensional de *numpy* representado a los nuevos individuos.

  Los inviduos de *parent_ind1* y *parent_ind2* son emparejados, es decir, se toman los padres en la posición $i$ en los dos arreglos y dichos padres son cruzados.

  Por defecto la metaheurística utiliza el operador de cruza discreta que se encuentra en *utils.operators.crossover* con el nombre de *discrete*.

* **adaptive_crossover.** Genera una cruza de los tamaños de paso de los individuos seleccionados de la población. Estos nuevos tamaños de paso son almacenados en logger con la llave `offspring_population_sigma`.

 Argumentos:
 * **parent_ind1.** Indices de los individuos que son seleccionados para emplear el operador de cruza.
 * **parent_ind2.** Indices de los individuos que son seleccionados para emplear el operador de cruza.

 Valor de retorno:
 * Un arreglo bidimensional de *numpy* representando los nuevos tamaños de paso.

  Por defecto la metaheurística utiliza el operador que se encuentra en *utils.operators.crossover* con el nombre de *intermediate*.

* **survivor_selection.** Selección de los individuos que pasarán a la próxima generación. la librería cuenta con dos esquemas de selección implementados en *utils.operators.selection*. Los esquemas de selección son:
    * **merge_selector.** Esquema $(\mu + \lambda)$, selecciona $\mu$ individuos que son obtenidos al unir la población de individuos creados por la cruza y la población actual. Los  individuos que permanecerán para la próxima generación son los más *aptos* de acuerdo a su función objetivo.
    * **replacement_selector.** El esquema $(\mu, \lambda)$, reemplaza la población actual con $\mu$ individuos de la población obtenida por la cruza. Los nuevos individuos son seleccionados por su función objetivo.

  Valor de retorno:
    * Una lista con un arreglo bidimensional de *numpy* representando la población $\mu$ y un arreglo *numpy* que será los valores de la función objetivo correspondientes de los individuos de la población $\mu$.

  Por defecto la metaheurística utiliza el esquema $(\mu + \lambda)$.

## Ejecución de la metaheurística
Creamos una instancia del tipo EvolutionStrategy indicando en los parámetros la función objetivo, las restricciones del problema, los limites del espacio de búsqueda por cada una de las variables de decisión y el número de variables de decisión.

```python
Beale = EvolutionStrategy(**beale_)
```

Finalmente, se llama a la función optimize (esta función es la misma para todas las clases en la librería). La función optimize recibe los siguientes parámetros:
   * **generations.**  Número de generaciones (iteraciones de la metaheurística).
   * **population_size.** Tamaño de la población (número de individuos).
   * **offspring_size.** Tamaño de la población creada por la cruza.
   * **eps_sigma.** Número flotante, indica lo menos que puede ser por tamaño de paso, por defecto está en 0.001.
   * **verbose.**  Muestra en que iteración se encuentra nuestra búsqueda, por defecto está en True.
   * **kargs: diccionario con parámetros adicionales que queremos incluir en la búsqueda.

Para esta ejecución para la función de Beale utilizaremos los siguientes parámetros:

   * **generations** = $300$
   * **population_size** = 80
   * **offspring_size** = 160

### ($\mu + \lambda$) - EE
Por defecto, la metaheurística realiza:
* La selección de sobrevivientes, utiliza un esquema $(\mu + \lambda)$
* El operador de cruza  para las variables de decisión es *recombinación discreta*.
* El operador de cruza para los tamaños de paso es *recombinación intermedia*.

```python
Beale.optimize(3,3,6,verbose=True)
```

    100%|██████████| 3/3 [00:01<00:00,  1.70it/s]

```python
print(Beale)
```

    Evolution Strategy search:
     f(X) = 0.10955969930560476
     X = [4.5        0.70923685]
     Constraints:
     x1: -4.5 <= 4.50 <= 4.5
     x2: -4.5 <= 0.71 <= 4.5

```python
Beale.logger
```

    {'individual': array([4.5       , 0.70923685]),
     'aptitude': 0.10955969930560476,
     'current_iter': 3,
     'total_iter': 3,
     'parent_population_size': 3,
     'offspring_population_size': 6,
     'parent_population_x': array([[4.43682245, 0.72605756],
            [4.5       , 0.70923685],
            [4.5       , 0.57322008]]),
     'parent_population_sigma': array([[0.96320332, 0.79743888],
            [0.55124707, 0.10170293],
            [0.31733607, 0.2256847 ]]),
     'parent_population_fitness': array([0.11702278, 0.1095597 , 1.82747003]),
     'offspring_population_x': array([[ 4.5       ,  1.35359872],
            [ 4.5       ,  1.21361455],
            [ 4.11595181,  0.89252655],
            [ 4.5       , -0.03443388],
            [ 4.5       ,  1.1938241 ],
            [ 4.5       ,  0.70923685]]),
     'offspring_population_sigma': array([[0.50910975, 0.31770413],
            [0.33123912, 0.40375854],
            [0.80659252, 0.1149148 ],
            [0.53433695, 0.85470618],
            [0.64947934, 0.21094289],
            [0.55124707, 0.10170293]]),
     'offspring_population_fitness': array([1.31715775e+02, 6.32762105e+01, 5.17521358e+00, 1.85085573e+01,
            5.63882776e+01, 1.09559699e-01])}

Para revisar el comportamiento de la metaheurística en determinado problema, la librería **Pyristic** cuenta con una función llamada get_stats. Esta función se encuentra en utils.helpers y recibe como parámetros:

   * Objeto que realiza la búsqueda de soluciones.
   * El número de veces que se quiere ejecutar la metaheurística.
   * Los argumentos que recibe la función optimize (debe ser una tupla).
   * Argumentos adicionales a la búsqueda(opcional).

La función **get_stats** retorna un diccionario con algunas estadísticas de las ejecuciones.

```python
args = (200, 100, 150)
statistics = get_stats(Beale, 30, args)
```

    100%|██████████| 200/200 [00:00<00:00, 642.61it/s]
    100%|██████████| 200/200 [00:00<00:00, 1005.35it/s]
    100%|██████████| 200/200 [00:00<00:00, 1016.00it/s]
    100%|██████████| 200/200 [00:00<00:00, 962.01it/s]
    100%|██████████| 200/200 [00:00<00:00, 960.26it/s]
    100%|██████████| 200/200 [00:00<00:00, 1020.20it/s]
    100%|██████████| 200/200 [00:00<00:00, 968.41it/s]
    100%|██████████| 200/200 [00:00<00:00, 948.27it/s]
    100%|██████████| 200/200 [00:00<00:00, 878.73it/s]
    100%|██████████| 200/200 [00:00<00:00, 944.59it/s]
    100%|██████████| 200/200 [00:00<00:00, 797.91it/s]
    100%|██████████| 200/200 [00:00<00:00, 1035.07it/s]
    100%|██████████| 200/200 [00:00<00:00, 855.56it/s]
    100%|██████████| 200/200 [00:00<00:00, 957.49it/s]
    100%|██████████| 200/200 [00:00<00:00, 770.00it/s]
    100%|██████████| 200/200 [00:00<00:00, 815.71it/s]
    100%|██████████| 200/200 [00:00<00:00, 976.47it/s]
    100%|██████████| 200/200 [00:00<00:00, 774.70it/s]
    100%|██████████| 200/200 [00:00<00:00, 867.17it/s]
    100%|██████████| 200/200 [00:00<00:00, 1019.11it/s]
    100%|██████████| 200/200 [00:00<00:00, 853.13it/s]
    100%|██████████| 200/200 [00:00<00:00, 944.85it/s]
    100%|██████████| 200/200 [00:00<00:00, 977.25it/s]
    100%|██████████| 200/200 [00:00<00:00, 939.14it/s]
    100%|██████████| 200/200 [00:00<00:00, 972.77it/s]
    100%|██████████| 200/200 [00:00<00:00, 1001.79it/s]
    100%|██████████| 200/200 [00:00<00:00, 1008.56it/s]
    100%|██████████| 200/200 [00:00<00:00, 1005.72it/s]
    100%|██████████| 200/200 [00:00<00:00, 967.20it/s]
    100%|██████████| 200/200 [00:00<00:00, 1012.96it/s]

```python
pprint(statistics)
```

    {'Best solution': {'f': 2.531750467693685e-29, 'x': array([3. , 0.5])},
     'Mean': 7.167292303379842e-23,
     'Standard deviation': 2.7240425061399494e-22,
     'Worst solution': {'f': 1.5028900595968608e-21, 'x': array([3. , 0.5])}}

### (1+1) - EE
Para este ejemplo resolveremos este problema utilizando la versión más simple de un algoritmo de estrategias evolutivas.

La búsqueda local se desarrolla de la siguiente manera:
 1. Mutamos el individuo con un parámetro ($\sigma$) de adaptación independiente al número de variables de decisión que tenga el problema.
 2. Mutamos $\sigma$ del nuevo individuo utilizando la regla del éxito 1/5.
 3. Se selecciona el individuo más apto que pasará a la próxima generación, es decir, se seleccionará al individuo que tenga un valor más pequeño en la función objetivo.

La regla del éxito 1/5, actualiza el parámetro de la siguiente manera:
\begin{equation}
  \sigma =
  \begin{cases}
   \sigma / c & \text{Si } p_s > 1/5, \\
   \sigma \cdot c & \text{Si } p_s < 1/5, \\
   \sigma  & \text{Si } p_s = 1/5 \\
  \end{cases}
\end{equation}

La forma en que mutamos el nuevo individuo se realiza así:
    \begin{equation}
      \label{eq:mutarVariables}
      x'_i = x_i + \sigma'_i \cdot N(0, 1)
    \end{equation}

Es importante resaltar, que esta versión no considera el operador de cruza (*crossover_operator* y *adaptive_crossover*). La razón es porque el operador está condicionado a seleccionar dos individuos de la población para generar 2 nuevas soluciones.

Vamos a sobreescribir *crossover_operator* y *adaptive_crossover* para que retornen el individuo original sin cambio alguno. Las funciones que serán alteradas en su comportamiento son:
* adaptive_mutation, se encarga de modificar $\sigma$.
* mutation_operator, esta función hará un pequeño cambio a la solución original tomando $\sigma$.
* initializing_step_weights, Inicializar el conjunto de $\sigma$.

```python
beale_
```

    {'function': CPUDispatcher(<function beale_function at 0x7fc8c4126378>),
     'constraints': [CPUDispatcher(<function constraint1_beale at 0x7fc8cc408510>)],
     'bounds': [-4.5, 4.5],
     'decision_variables': 2}

```python
class ESBasic(EvolutionStrategy):

    def __init__(self, function  ,\
                 decision_variables:int,\
                 constraints: list,\
                 bounds: np.ndarray):
        super().__init__(function, decision_variables, constraints, bounds)

        self.successful = 0

    def crossover_operator(self, parent_ind1,\
                                 parent_ind2,\
                                 **kargs):
        return self.logger['parent_population_x']

    def adaptive_crossover(self, parent_ind1,\
                                 parent_ind2,\
                                 **kargs):
        return self.logger['parent_population_sigma']

    def adaptive_mutation(self, **kargs):

            if self.logger['current_iter'] % kargs['k'] != 0:
                return self.logger['offspring_population_sigma']

            ps = self.successful / kargs['k']
            self.successful = 0
            if( ps > 1/5):
                return self.logger['offspring_population_sigma']/kargs['c']
            elif( ps < 1/5):
                return self.logger['offspring_population_sigma']*kargs['c']
            else:
                return self.logger['offspring_population_sigma']

    def mutation_operator(self, **kargs):
        X_mutated = copy.deepcopy(self.logger['offspring_population_x'])
        X_mutated += self.logger['offspring_population_sigma'] * np.random.normal(0,1, size=X_mutated.shape)

        if(self.f(self.logger['offspring_population_x'][0]) > self.f(X_mutated[0])):
            self.successful+=1

        return X_mutated

    def initializing_step_weights(self, eps_sigma:int, **kwargs) -> np.ndarray:
        return np.random.uniform(0,1, size=(self.logger['parent_population_size'], 1))
```

```python
Beale_basic = ESBasic(**beale_)
```

En la implementación notamos que estamos haciendo uso de un argumento declarado *kargs*, dicho argumento es un diccionario que contiene información adicional a la búsqueda. En este caso contiene dos constantes que podemos modificar antes de llamar la función **EEClass.optimize**.

El diccionario tiene que ser incluido siempre con `**` antes del nombre de la variable que contiene este diccionario.

```python
additional_arguments = {'k':10,'c':0.83}
```

```python
Beale_basic.optimize(generations=100,\
                     population_size=1,\
                     offspring_size=1,\
                     **additional_arguments)
```

    100%|██████████| 100/100 [00:00<00:00, 3951.26it/s]

```python
print(Beale_basic)
```

    Evolution Strategy search:
     f(X) = 0.8617989584848492
     X = [-3.48781252  1.22350314]
     Constraints:
     x1: -4.5 <= -3.49 <= 4.5
     x2: -4.5 <= 1.22 <= 4.5

```python
args = (500, 1, 1, True)
statistics = get_stats(Beale_basic, 30, args,**additional_arguments )
```

    100%|██████████| 500/500 [00:00<00:00, 4175.56it/s]
    100%|██████████| 500/500 [00:00<00:00, 6980.18it/s]
    100%|██████████| 500/500 [00:00<00:00, 16295.65it/s]
    100%|██████████| 500/500 [00:00<00:00, 14609.11it/s]
    100%|██████████| 500/500 [00:00<00:00, 13795.33it/s]
    100%|██████████| 500/500 [00:00<00:00, 14063.90it/s]
    100%|██████████| 500/500 [00:00<00:00, 14416.49it/s]
    100%|██████████| 500/500 [00:00<00:00, 11590.57it/s]
    100%|██████████| 500/500 [00:00<00:00, 14894.12it/s]
    100%|██████████| 500/500 [00:00<00:00, 15258.23it/s]
    100%|██████████| 500/500 [00:00<00:00, 14794.10it/s]
    100%|██████████| 500/500 [00:00<00:00, 12553.21it/s]
    100%|██████████| 500/500 [00:00<00:00, 14944.43it/s]
    100%|██████████| 500/500 [00:00<00:00, 13289.52it/s]
    100%|██████████| 500/500 [00:00<00:00, 12975.66it/s]
    100%|██████████| 500/500 [00:00<00:00, 13600.21it/s]
    100%|██████████| 500/500 [00:00<00:00, 15335.10it/s]
    100%|██████████| 500/500 [00:00<00:00, 15661.96it/s]
    100%|██████████| 500/500 [00:00<00:00, 13863.18it/s]
    100%|██████████| 500/500 [00:00<00:00, 11878.85it/s]
    100%|██████████| 500/500 [00:00<00:00, 10007.79it/s]
    100%|██████████| 500/500 [00:00<00:00, 13039.31it/s]
    100%|██████████| 500/500 [00:00<00:00, 14481.99it/s]
    100%|██████████| 500/500 [00:00<00:00, 16446.32it/s]
    100%|██████████| 500/500 [00:00<00:00, 16050.33it/s]
    100%|██████████| 500/500 [00:00<00:00, 16198.23it/s]
    100%|██████████| 500/500 [00:00<00:00, 15697.13it/s]
    100%|██████████| 500/500 [00:00<00:00, 15791.81it/s]
    100%|██████████| 500/500 [00:00<00:00, 13883.73it/s]
    100%|██████████| 500/500 [00:00<00:00, 14785.96it/s]

```python
pprint(statistics)
```

    {'Best solution': {'f': 6.046204079720323e-07,
                       'x': array([2.99808282, 0.49949865])},
     'Mean': 0.2718825230311985,
     'Standard deviation': 0.37798082885593254,
     'Worst solution': {'f': 0.921247769181009,
                        'x': array([-3.27730716,  1.22975648])}}

## Función de Ackley

\begin{equation}
  \min f(\vec{x}) = -20\exp \left( -0.2 \sqrt{\frac{1}{n} \sum_{i=1}^n x_i^2} \right)
  - exp \left( \frac{1}{n} \sum_{i=1}^n \cos (2\pi x_i) \right)
  + 20 + e
\end{equation}

El mínimo global está en $x^* = 0 $ y $f(\vec{x}) = 0$.

```python
Image(filename="include/ackley.jpg", width=500, height=300)
```

```python
ackley_['decision_variables']=4
```

### Descripción
Ahora vamos a mostrar la forma de implementar una instancia de *EvolutionStrategy*, pero utilizando un constructor con los operadores que deseamos utilizar. A continuación explicaremos los siguientes operadores populares en el uso de estrategias evolutivas.

Operadores de cruza:
   * discrete_crossover.
   * intermediate_crossover.

Operadores de mutación:
   * sigma_single_adaptive.
   * sigma_mult_adaptive.

#### discrete_crossover
toma como parámetros de entrada:
* Una matriz $X$ de numpy, donde, cada fila es un individuo de nuestra población y el número de columnas es el número de variables de decisión.
* Indices seleccionados como primer padre.
* Indices seleccionados como segundo padre.

Combina dos individuos de la siguiente manera:
\begin{equation}
  z_{i} =
  \begin{cases}
   x_{i} & \text{Si } b_{i} = 1, \\
   y_{i}  & \text{Si } b_{i} = 0 \\
  \end{cases}
\end{equation}

#### intermediate_crossover
toma como parámetros de entrada:
* Una matrix $X$ de numpy, donde, cada fila es un individuo de nuestra población y el número de columnas es el número de variables de decisión.
* Un arreglo con los indices seleccionados como primer padre.
* Un arreglo con los indices seleccionados como segundo padre.
Combina dos individuos de la siguiente manera:
\begin{equation}
z_{i} = \frac{x_{i} + y_{i}}{2}
\end{equation}

#### sigma_single_adaptive
toma como parámetros de entrada:
* Una matriz $X$ de numpy, donde, cada fila es un individuo de nuestra población y el número de columnas es el número de variables de decisión.
* Un valor real que será $\tau$.

\begin{equation}
 \sigma' = \sigma \cdot e^{\tau \cdot N(0,1)}
\end{equation}

####  sigma_mult_adaptive
toma como parámetros de entrada:
* Una matriz $X$ de numpy, donde, cada fila es un individuo de nuestra población y el número de columnas es el número de variables de decisión.
* Valor numérico real $\tau'$.
* Valor numérico real $\tau$.

\begin{equation}
\sigma'_i = \sigma_i \cdot e ^ {\tau' \cdot N(0,1) + \tau \cdot N_i(0,1)}
\end{equation}

### Instancia de Programación Evolutiva¶

Para esta ejecución para la función de Ackley utilizaremos los siguientes parámetros:

   * **generations** = $250$
   * **population_size** = $100$
   * **offspring_size** = $200$

### ($\mu+\lambda$)-EE

En este caso dejaremos todos los demás operadores por defecto, hemos modificado son el de cruza y mutación.

```python
Ackley = EvolutionStrategy(**ackley_)
```

```python
Ackley.optimize(1,3,6)
```

    100%|██████████| 1/1 [00:00<00:00,  5.38it/s]

```python
print(Ackley)
```

    Evolution Strategy search:
     f(X) = 19.476948083887855
     X = [ 8.96934925  5.09846682 18.70513223 -7.57257029]
     Constraints:
     x1: -30 <= 8.97 <= 30
     x2: -30 <= 5.10 <= 30
     x3: -30 <= 18.71 <= 30
     x4: -30 <= -7.57 <= 30

```python
Ackley.logger
```

    {'individual': array([ 8.96934925,  5.09846682, 18.70513223, -7.57257029]),
     'aptitude': 19.476948083887855,
     'current_iter': 1,
     'total_iter': 1,
     'parent_population_size': 3,
     'offspring_population_size': 6,
     'parent_population_x': array([[  8.96934925,   5.09846682,  18.70513223,  -7.57257029],
            [  8.4524102 ,   5.16316816,  18.06077986,  -7.53892779],
            [ -8.32637279,   4.07977034,  12.55491146, -28.1268455 ]]),
     'parent_population_sigma': array([[0.25164569, 0.32910243, 0.58914509, 0.0989071 ],
            [0.08987467, 0.20818987, 0.71298766, 0.13315103],
            [0.27459672, 0.02898391, 0.20343108, 0.47435981]]),
     'parent_population_fitness': array([19.47694808, 19.60054368, 20.87230857]),
     'offspring_population_x': array([[ 27.52446073,  -2.36850241,  18.36566998,  20.48893139],
            [ -8.09403774,   4.03167562,  12.49984059, -29.34127793],
            [ 27.4183298 ,  -1.81467959,  18.78930545,  21.81177869],
            [ 27.43274955,   3.95385922,  12.73259207, -28.87507765],
            [  8.96934925,   5.09846682,  18.70513223,  -7.57257029],
            [ 27.30279264,  -2.04919679,  17.55077079,  21.80241145]]),
     'offspring_population_sigma': array([[0.09328434, 0.35167405, 0.34037538, 0.84356981],
            [0.29259132, 0.05660925, 0.14531565, 1.06138595],
            [0.13558273, 0.28656455, 0.17726221, 0.92161178],
            [0.12599585, 0.15682004, 0.18392628, 0.76320512],
            [0.25164569, 0.32910243, 0.58914509, 0.0989071 ],
            [0.21656457, 0.43906007, 0.39294922, 0.21771864]]),
     'offspring_population_fitness': array([21.87789289, 20.92227132, 21.30703313, 21.24356204, 19.47694808,
            21.31942308])}

```python
Ackley.survivor_selection()
```

    {'fitness': array([19.47694808, 19.47694808, 19.60054368]),
     'population': array([[ 8.96934925,  5.09846682, 18.70513223, -7.57257029],
            [ 8.96934925,  5.09846682, 18.70513223, -7.57257029],
            [ 8.4524102 ,  5.16316816, 18.06077986, -7.53892779]]),
     'sigma': array([[0.25164569, 0.32910243, 0.58914509, 0.0989071 ],
            [0.25164569, 0.32910243, 0.58914509, 0.0989071 ],
            [0.08987467, 0.20818987, 0.71298766, 0.13315103]])}

```python
Ackley.logger['parent_population_sigma'][0]
```

    array([0.25164569, 0.32910243, 0.58914509, 0.0989071 ])

```python
args = (250, 100, 200)
statistics = get_stats(Ackley, 30, args)
```

    100%|██████████| 250/250 [00:01<00:00, 240.56it/s]
    100%|██████████| 250/250 [00:00<00:00, 284.03it/s]
    100%|██████████| 250/250 [00:00<00:00, 309.16it/s]
    100%|██████████| 250/250 [00:00<00:00, 293.80it/s]
    100%|██████████| 250/250 [00:00<00:00, 280.59it/s]
    100%|██████████| 250/250 [00:00<00:00, 278.84it/s]
    100%|██████████| 250/250 [00:00<00:00, 285.39it/s]
    100%|██████████| 250/250 [00:00<00:00, 290.13it/s]
    100%|██████████| 250/250 [00:00<00:00, 293.06it/s]
    100%|██████████| 250/250 [00:00<00:00, 304.24it/s]
    100%|██████████| 250/250 [00:00<00:00, 291.28it/s]
    100%|██████████| 250/250 [00:00<00:00, 284.69it/s]
    100%|██████████| 250/250 [00:00<00:00, 298.78it/s]
    100%|██████████| 250/250 [00:00<00:00, 302.24it/s]
    100%|██████████| 250/250 [00:00<00:00, 285.02it/s]
    100%|██████████| 250/250 [00:00<00:00, 270.83it/s]
    100%|██████████| 250/250 [00:00<00:00, 283.50it/s]
    100%|██████████| 250/250 [00:00<00:00, 316.32it/s]
    100%|██████████| 250/250 [00:00<00:00, 311.13it/s]
    100%|██████████| 250/250 [00:00<00:00, 286.08it/s]
    100%|██████████| 250/250 [00:00<00:00, 288.20it/s]
    100%|██████████| 250/250 [00:00<00:00, 275.65it/s]
    100%|██████████| 250/250 [00:00<00:00, 302.16it/s]
    100%|██████████| 250/250 [00:00<00:00, 295.19it/s]
    100%|██████████| 250/250 [00:00<00:00, 295.26it/s]
    100%|██████████| 250/250 [00:00<00:00, 290.50it/s]
    100%|██████████| 250/250 [00:00<00:00, 271.67it/s]
    100%|██████████| 250/250 [00:00<00:00, 296.29it/s]
    100%|██████████| 250/250 [00:00<00:00, 291.37it/s]
    100%|██████████| 250/250 [00:00<00:00, 298.67it/s]

```python
pprint(statistics)
```

    {'Best solution': {'f': 3.9968028886505635e-15,
                       'x': array([-2.08159927e-15, -1.46190110e-16,  3.20354101e-16, -4.42506442e-16])},
     'Mean': 2.1743495892678765e-12,
     'Standard deviation': 7.788381322703422e-12,
     'Worst solution': {'f': 4.224931515750541e-11,
                        'x': array([2.33953833e-12, 8.14628091e-12, 1.92327519e-11, 2.12383507e-12])}}

### ($\mu,\lambda$)-EE

El constructor de la configuración de los operadores de estrategias evolutivas (EvolutionStrategyConfig) es indicando los operadores a modificar:
* .cross( *operador de cruza* )
* .mutate( *operador de mutación* )
* .survivor_selection( *esquema de selección* )
* .fixer_invalide_solutions( *función para retornar un individuo invalido*)
* .adaptive_crossover( *operador de cruza para $\sigma$* )
* .adaptive_mutation( *operador de mutación para $\sigma$*)

```python
configuration_ackley = (EvolutionStrategyConfig()
                       .survivor_selection(selection.replacement_selector())
                       )
```

```python
print(configuration_ackley)
```

    --------------------------------
    	Configuration
    --------------------------------
    Survivor selection: Replacement population

    --------------------------------

```python
solver_ackley_custom = EvolutionStrategy(**ackley_,config=configuration_ackley)
```

```python
solver_ackley_custom.optimize(150,100,200)
```

    100%|██████████| 150/150 [00:00<00:00, 244.74it/s]

```python
solver_ackley_custom.logger
```

    {'individual': array([-1.26118584e-04, -1.26475657e-04, -1.29772722e-04, -2.90680402e-06]),
     'aptitude': 0.0004422434596915714,
     'current_iter': 150,
     'total_iter': 150,
     'parent_population_size': 100,
     'offspring_population_size': 200,
     'parent_population_x': array([[ 9.40205246e-05, -1.75234549e-05, -3.72942300e-04,
             -2.45349233e-04],
            [ 2.36137728e-04,  1.69480306e-04, -2.40383318e-04,
              1.94924215e-04],
            [-2.39599319e-04, -8.56343494e-05, -3.21039629e-04,
             -2.18728297e-04],
            [ 3.80038972e-04,  1.78766479e-04, -1.08703736e-04,
             -4.19441405e-05],
            [-2.90489854e-04, -1.28465891e-04, -3.70762526e-04,
             -1.00096971e-04],
            [ 2.45381266e-04, -9.59688727e-05, -2.76540561e-04,
             -2.10936988e-04],
            [ 1.15720021e-04, -3.42010671e-04, -3.25310941e-05,
              8.02426530e-05],
            [-1.96285549e-04,  1.38530838e-04,  3.84576076e-04,
              8.97181931e-05],
            [-2.02078030e-05,  3.93762321e-04,  1.97318952e-04,
              1.67152998e-04],
            [ 7.44634959e-05, -4.78125776e-04,  2.15605639e-04,
             -5.15349661e-05],
            [ 1.08848172e-04,  2.93594500e-04,  9.24102056e-05,
              3.77265558e-04],
            [ 1.20468753e-04,  4.03830938e-04,  5.85252783e-05,
             -3.10896685e-04],
            [ 2.46846671e-04, -8.84489546e-05, -3.76975388e-04,
             -2.51041111e-05],
            [ 8.92379911e-05,  2.84123809e-04,  8.24833055e-05,
             -7.05256091e-05],
            [-2.23457769e-04, -8.74874323e-05, -1.68914175e-04,
             -3.85570688e-04],
            [-1.06308335e-04, -9.57899804e-05,  3.10949741e-04,
              3.39475980e-05],
            [ 1.54791296e-04,  2.14828761e-04,  2.77535269e-04,
              3.38444782e-05],
            [-2.10691094e-04, -3.77971484e-04, -2.91798653e-04,
             -1.54698454e-05],
            [-5.50538972e-05, -3.41865593e-04,  2.57938968e-04,
              2.12710968e-04],
            [ 1.64221445e-04,  2.56752971e-04,  3.02803732e-04,
             -3.01446524e-04],
            [ 3.12961001e-05, -2.03980392e-04, -2.00330715e-04,
              3.02396743e-04],
            [-3.18594135e-04, -1.30585877e-04,  1.13985357e-04,
              1.07016794e-04],
            [-1.39219229e-04,  6.48090066e-05, -2.76817227e-04,
              4.45591467e-05],
            [-2.45609345e-05,  1.12129128e-04,  2.10138237e-04,
             -2.10785610e-04],
            [ 1.85879081e-04, -1.74559268e-04, -4.73689282e-05,
             -3.74948984e-04],
            [ 3.29217668e-05,  1.55401987e-05,  2.18162764e-04,
             -1.78948762e-04],
            [-1.83857274e-04, -3.29080121e-04,  2.24845871e-04,
              1.49454947e-04],
            [-1.26118584e-04, -1.26475657e-04, -1.29772722e-04,
             -2.90680402e-06],
            [ 2.77486314e-05, -3.15162352e-04,  2.91711082e-04,
             -2.50886289e-04],
            [-2.99642092e-04,  2.08135265e-04,  5.44486395e-05,
              2.68832445e-04],
            [-7.22432770e-05,  8.55235153e-05,  2.42480901e-04,
              1.64314821e-04],
            [ 1.83551757e-05,  7.98850902e-05,  1.72827685e-04,
             -3.84325324e-04],
            [ 2.28201332e-04, -3.28878049e-04, -1.86464314e-04,
             -2.99001219e-05],
            [ 7.46341439e-06,  1.62865336e-04, -1.04496521e-04,
              3.91277974e-04],
            [ 3.77812702e-05,  2.65826494e-04,  2.86378942e-04,
             -7.10802972e-05],
            [-1.25847785e-04, -3.21295973e-04,  3.61430229e-04,
             -1.66102033e-04],
            [ 1.91249814e-04, -1.56579956e-04, -2.78263607e-04,
              2.04332895e-04],
            [ 1.10924250e-04,  1.46984262e-04,  7.29567306e-05,
              4.05462727e-04],
            [-3.86319702e-04, -2.09900137e-04,  1.66715090e-04,
              3.81535570e-05],
            [-3.58785766e-05, -3.08123126e-04,  3.43028094e-04,
             -9.87285357e-06],
            [ 3.67330935e-04,  3.32071604e-04,  1.76461822e-04,
             -1.07876615e-05],
            [ 2.11977128e-04,  4.27207037e-05,  1.15192738e-04,
              1.52413851e-05],
            [ 1.88706733e-04,  3.75379792e-04, -8.16209781e-05,
              1.54596612e-04],
            [ 7.60791789e-05, -2.00873630e-04, -1.20294914e-04,
             -9.54107193e-06],
            [ 2.18818901e-04,  3.64475624e-04, -3.90196685e-05,
             -7.64745922e-06],
            [-2.43790895e-04,  1.76528674e-04, -5.20536244e-05,
             -1.02965507e-04],
            [-2.21445953e-04, -1.29217852e-04,  2.14138757e-05,
             -4.75206824e-06],
            [ 8.61257833e-05,  1.16757864e-04, -1.26081915e-04,
             -1.16590530e-04],
            [ 1.98036766e-04, -3.71917510e-04,  1.73357084e-04,
             -9.33068419e-06],
            [-3.26356638e-04, -1.15195661e-04, -1.43094380e-04,
              1.51054575e-04],
            [ 3.35084323e-04, -1.61089600e-04,  3.21047823e-04,
             -1.69504189e-04],
            [ 2.17509510e-04, -3.39509294e-04,  3.58612277e-05,
             -3.25753398e-04],
            [ 4.74145456e-04, -1.35013678e-05,  1.60219619e-04,
              1.93463444e-05],
            [ 3.36846378e-04,  9.81711086e-05, -1.70594597e-04,
              1.16490776e-04],
            [-2.17071097e-04,  3.45732241e-05,  3.53081001e-05,
              3.32676371e-04],
            [-2.27301749e-05, -3.10553832e-04,  4.06760574e-04,
             -5.86852049e-05],
            [ 2.74537701e-04,  3.50762429e-05, -1.17803928e-04,
             -1.11173357e-04],
            [-5.68486340e-05, -2.09709517e-04,  7.14518539e-05,
              2.54740924e-04],
            [-3.51456239e-04,  9.28505662e-05,  3.16744561e-04,
             -1.53215636e-04],
            [ 3.46727901e-04,  6.22442945e-05, -2.16615893e-04,
             -1.75575893e-04],
            [-1.15656862e-04, -1.48051708e-04,  2.80758728e-04,
              5.99211304e-05],
            [-1.90367311e-04,  1.97589886e-04,  7.49104853e-05,
              6.35680559e-05],
            [-2.35455612e-04, -7.02412707e-05,  5.03244869e-05,
              7.87659247e-05],
            [ 2.48064153e-04, -2.86505338e-04,  5.21778248e-05,
              1.41770935e-04],
            [ 3.62389385e-05, -1.16208205e-05,  3.11008987e-04,
              3.07097813e-04],
            [ 7.34950820e-05, -2.31711429e-04,  2.51369365e-04,
              1.45113960e-04],
            [-2.70672223e-04, -4.86872239e-05,  1.41005437e-04,
              3.42888969e-05],
            [ 2.17410763e-04, -2.48354488e-04,  8.20798404e-05,
              1.79057951e-04],
            [-1.59243064e-05, -8.80759003e-05,  1.33531746e-04,
             -2.78311536e-04],
            [ 7.27938881e-05, -2.93554239e-04, -1.89959058e-04,
              2.38449920e-05],
            [-2.72211575e-04, -2.24782753e-04, -2.71124433e-04,
              1.31123534e-04],
            [ 2.97547490e-04,  1.00331958e-04, -4.30648365e-04,
             -5.70929789e-06],
            [ 5.33590610e-04, -1.57332338e-04,  1.09607772e-04,
              2.54342900e-05],
            [-8.12456770e-05,  3.18143550e-04, -2.03806116e-04,
              4.17754769e-04],
            [ 5.73770430e-05, -1.48959106e-04,  5.53157631e-04,
             -1.33194307e-04],
            [-4.97302035e-04,  1.23465186e-04, -2.07418874e-04,
              1.53824960e-04],
            [-2.77591977e-04,  6.67211912e-05, -4.60189806e-04,
              5.44312053e-05],
            [-4.66405751e-04,  2.32896980e-04,  2.40557638e-04,
              9.68757269e-05],
            [-2.13982000e-04,  4.29170310e-04,  1.39128762e-04,
              2.28355283e-04],
            [ 1.31900827e-04, -9.25383490e-05,  3.75474924e-04,
             -3.85247260e-04],
            [ 7.90059873e-05, -1.01717188e-04,  5.46385577e-04,
             -5.32720652e-05],
            [ 7.94017923e-06,  2.65772504e-04,  5.10083033e-04,
             -8.90003907e-05],
            [-2.56279245e-04, -1.60463408e-04,  3.44363879e-04,
             -3.08880973e-04],
            [ 2.35286086e-04, -3.94100766e-04,  3.26486067e-04,
             -9.01616431e-05],
            [-2.05201292e-04,  2.07103659e-04, -4.70445880e-04,
             -8.39762835e-05],
            [-3.63145918e-04,  5.85416615e-05, -4.40952672e-04,
             -3.13256322e-06],
            [-1.65777972e-04, -2.61356966e-04, -8.88899914e-06,
              4.42435793e-04],
            [-4.25665832e-04, -1.99120171e-04,  1.06427267e-04,
              2.52063237e-04],
            [ 3.33340069e-04,  2.95707580e-04, -3.24851806e-04,
             -5.89318935e-05],
            [-2.76161294e-04, -2.90384008e-04,  3.39522679e-04,
             -1.57713708e-04],
            [ 1.86966624e-04, -2.19048159e-04,  4.49177211e-04,
              2.27906264e-04],
            [-3.35056852e-04, -4.36391948e-04, -9.79203156e-05,
             -1.22981618e-04],
            [ 4.16582479e-04, -1.44190215e-04, -3.36900736e-04,
              8.97951793e-05],
            [ 3.88857929e-04, -2.53340340e-04, -3.57033774e-04,
              3.08705474e-05],
            [ 2.87784561e-04, -2.95989878e-04,  4.13111303e-04,
              3.15365437e-05],
            [ 4.25677636e-04, -6.56047693e-05,  2.16414483e-04,
             -3.31141086e-04],
            [ 5.19599531e-04,  2.04903323e-04, -6.41019320e-05,
             -1.58326646e-04],
            [-5.32442414e-04,  8.21606940e-05,  2.37322827e-04,
             -9.12743359e-05],
            [ 4.50761302e-05, -4.12936825e-04,  4.22924734e-04,
              7.05306826e-05],
            [ 3.19781512e-04,  3.60168370e-05,  4.56069940e-04,
              2.34261097e-04]]),
     'parent_population_sigma': array([[1.98536664e-04, 1.38826246e-04, 9.29880879e-05, 1.45457430e-04],
            [1.46809265e-04, 9.82574953e-05, 1.93716585e-04, 1.47341346e-04],
            [1.87826810e-04, 2.29324229e-04, 5.95640156e-04, 9.86553337e-05],
            [1.87343970e-04, 3.40289913e-04, 5.08992439e-04, 6.75636177e-05],
            [7.56893172e-05, 1.21069623e-04, 1.33719056e-04, 1.11211808e-04],
            [1.05073345e-04, 4.96710213e-05, 1.73972998e-04, 7.67749860e-05],
            [2.03002766e-04, 2.36143162e-04, 1.09495669e-04, 1.30024149e-04],
            [2.01715406e-04, 7.92898811e-05, 9.55340117e-05, 1.04677017e-04],
            [3.09539126e-05, 4.04608444e-04, 1.58608623e-04, 1.21744389e-04],
            [1.36252389e-04, 6.89158547e-05, 3.47938125e-04, 9.75053967e-05],
            [4.53125051e-05, 5.31000811e-05, 1.28953619e-04, 4.43171762e-05],
            [1.63893311e-04, 1.11905194e-04, 7.51948474e-05, 6.16851866e-05],
            [3.18451336e-05, 8.27454001e-05, 1.08434888e-04, 1.54355850e-04],
            [6.09652126e-04, 8.12611693e-05, 1.30397872e-04, 1.29866728e-04],
            [3.61268544e-04, 5.92951726e-05, 4.34681519e-04, 4.01623959e-04],
            [6.84064961e-05, 4.20415725e-05, 4.18139702e-05, 1.61721031e-04],
            [1.38301581e-04, 7.93359762e-05, 8.10546323e-05, 1.60415977e-04],
            [5.93229149e-05, 2.51114600e-04, 1.95240814e-04, 7.98311426e-05],
            [1.18115340e-04, 8.54208332e-05, 2.76179897e-04, 1.25620430e-04],
            [1.97791909e-04, 8.75631480e-05, 1.04151262e-04, 2.17376780e-04],
            [4.68066257e-04, 4.97484698e-05, 4.06232452e-04, 1.81251712e-04],
            [2.78798368e-04, 5.40772364e-05, 1.39298726e-04, 7.69439557e-05],
            [8.48429249e-05, 4.89080595e-05, 5.25484058e-05, 2.67184567e-04],
            [1.97844216e-04, 1.07749793e-04, 1.27835426e-04, 1.79260646e-04],
            [1.09745224e-04, 2.80244688e-04, 1.20213218e-04, 1.48362404e-04],
            [1.24327403e-04, 1.07672908e-04, 8.03732003e-05, 7.74401743e-05],
            [4.07180431e-04, 8.62721469e-05, 3.74800330e-04, 1.45817504e-04],
            [5.99181266e-05, 3.56477150e-04, 1.25268757e-04, 1.09662996e-04],
            [5.75508753e-04, 9.24778733e-05, 1.59100146e-04, 1.27939300e-04],
            [1.13611221e-04, 8.34214570e-05, 9.91494942e-05, 2.79237282e-05],
            [5.45037098e-05, 9.62665631e-05, 1.17073132e-04, 5.24761218e-05],
            [8.82348968e-05, 7.84995906e-05, 9.04392079e-05, 9.78123200e-05],
            [1.73053227e-04, 1.34160316e-04, 8.08819823e-05, 5.60656061e-04],
            [2.03221179e-04, 2.25569930e-04, 5.89152898e-04, 2.49799494e-04],
            [1.09648995e-04, 8.78968089e-05, 6.72299088e-05, 1.93212631e-04],
            [1.91342965e-04, 1.03241742e-04, 4.17077754e-04, 1.53279067e-04],
            [1.92781364e-04, 1.18512320e-04, 2.83067440e-04, 1.08897875e-04],
            [2.57858615e-04, 6.33760094e-05, 8.72071419e-05, 1.19967645e-04],
            [1.35696192e-04, 1.74672024e-05, 9.03372163e-05, 1.09089103e-04],
            [3.39531010e-04, 9.14142780e-05, 3.06200174e-04, 7.86954114e-05],
            [4.04851316e-04, 1.05896503e-04, 4.66593481e-05, 1.58148657e-04],
            [2.05586063e-04, 1.77355708e-04, 1.03249507e-04, 9.85144148e-05],
            [7.47638228e-05, 2.74569741e-04, 7.03228268e-05, 1.22358958e-04],
            [1.40781170e-04, 5.15793279e-05, 1.23080643e-04, 9.56292933e-05],
            [7.01712785e-05, 1.36835546e-04, 2.40014792e-04, 9.12722336e-05],
            [1.75902288e-04, 7.57745914e-05, 4.54010969e-05, 7.69729938e-05],
            [6.48779493e-05, 1.20337020e-04, 2.53010410e-04, 5.39778784e-05],
            [4.83290749e-05, 2.11751834e-04, 6.31690895e-05, 9.44938483e-05],
            [1.11990709e-04, 5.81569992e-05, 1.70111185e-04, 3.28414837e-04],
            [2.60969368e-04, 4.57840391e-05, 8.28481420e-05, 2.31966388e-04],
            [2.63808392e-04, 5.77934578e-05, 7.96642488e-05, 2.35617101e-04],
            [2.07506346e-04, 5.73967768e-05, 9.18441919e-05, 3.78162659e-04],
            [2.20135672e-04, 1.93796493e-04, 8.45730393e-05, 4.50109650e-04],
            [2.09375675e-04, 2.97830016e-04, 1.43146208e-04, 1.57184169e-04],
            [1.69948187e-04, 5.27768509e-05, 4.44864531e-04, 1.11617191e-04],
            [1.45235027e-04, 1.58240758e-04, 1.03907220e-04, 1.15714038e-04],
            [1.13523142e-04, 1.25432787e-04, 2.36894431e-04, 4.52601974e-05],
            [1.14965011e-04, 1.05020338e-04, 4.86650697e-04, 2.53715092e-04],
            [1.15421219e-04, 4.00376883e-05, 6.13785858e-05, 1.04718871e-04],
            [1.54274420e-04, 1.16206640e-04, 1.19172439e-04, 6.42886415e-05],
            [1.23398126e-04, 3.87441542e-05, 2.26237643e-04, 1.88334146e-04],
            [2.00509679e-04, 2.68889258e-05, 9.94749860e-05, 1.48349072e-04],
            [3.35322436e-04, 8.21181256e-05, 1.82860131e-04, 1.08862153e-04],
            [1.41920633e-04, 1.96234633e-04, 1.66479276e-04, 1.12060653e-04],
            [2.04329844e-04, 3.72391837e-04, 3.88107340e-05, 1.74515242e-04],
            [1.41824816e-04, 2.99848064e-04, 3.49875164e-04, 6.37376123e-05],
            [7.16420563e-05, 8.16727624e-05, 6.82151241e-05, 3.44364767e-05],
            [2.18628460e-04, 1.62297239e-04, 1.80892094e-04, 5.20863080e-05],
            [1.75226397e-04, 1.17549719e-04, 1.91232873e-04, 1.33981838e-04],
            [2.60757141e-05, 8.66468358e-05, 1.50365383e-04, 1.68273030e-04],
            [4.62838680e-04, 1.43158920e-04, 7.92647204e-05, 4.53654741e-05],
            [9.48617222e-05, 8.43544786e-05, 2.77094066e-04, 1.42555987e-04],
            [4.22648254e-04, 5.67930441e-05, 1.81433351e-04, 5.63178112e-05],
            [2.20250750e-04, 1.14336169e-04, 4.88174562e-05, 4.16764967e-05],
            [2.33205388e-04, 1.43141536e-04, 3.24775569e-04, 7.43362623e-05],
            [9.80780684e-05, 1.96736899e-04, 2.47569442e-04, 3.64689399e-05],
            [1.05046557e-04, 6.84013119e-05, 7.67377427e-04, 4.15440191e-05],
            [2.13715619e-04, 6.24279012e-05, 1.27467971e-04, 1.46676210e-04],
            [3.58152330e-04, 4.28956219e-05, 9.96959604e-05, 1.18535794e-04],
            [1.12424881e-04, 2.87343792e-05, 3.53347288e-04, 2.08930646e-04],
            [9.08018830e-05, 7.62689806e-05, 3.85548290e-04, 1.56833972e-04],
            [8.96695564e-05, 3.83356973e-05, 2.07080494e-04, 7.12926046e-05],
            [1.72512002e-04, 3.92935330e-05, 1.38849385e-04, 1.64226558e-04],
            [2.02482959e-04, 8.00076958e-05, 1.82411499e-04, 2.29456482e-04],
            [1.50797129e-04, 4.58682619e-05, 4.72256638e-04, 1.50389456e-04],
            [1.10637235e-04, 1.64437846e-04, 7.17047999e-05, 1.10521619e-04],
            [3.29996226e-04, 7.15247938e-05, 3.86598173e-04, 2.73198469e-04],
            [8.36077578e-05, 2.05601417e-05, 2.02352663e-04, 1.20479137e-04],
            [1.47687044e-04, 1.83958809e-04, 1.19266888e-04, 1.48193069e-04],
            [2.38347115e-04, 7.52702139e-05, 1.37750951e-04, 9.59518790e-05],
            [1.28594537e-04, 1.55898727e-04, 1.25356957e-04, 1.60923268e-04],
            [3.22250285e-04, 8.67532154e-05, 5.57512864e-05, 1.18415630e-04],
            [1.09831705e-04, 3.95749304e-05, 2.30782692e-04, 7.77866463e-05],
            [3.06040460e-04, 1.34206994e-04, 2.13757796e-04, 1.47327121e-04],
            [2.23138880e-04, 4.37375264e-05, 1.17421795e-04, 3.39113602e-05],
            [2.60345753e-04, 1.58894445e-04, 6.85355002e-05, 1.45194439e-04],
            [2.94330299e-04, 4.10559458e-05, 1.88474958e-04, 2.75516888e-04],
            [4.44511152e-04, 1.06903245e-04, 3.24288894e-04, 2.61888278e-04],
            [1.79241582e-04, 8.97309046e-05, 4.06936785e-04, 1.19686496e-04],
            [1.07831149e-04, 8.92733990e-05, 2.53742202e-04, 8.90320087e-05]]),
     'parent_population_fitness': array([0.00091586, 0.00085155, 0.00093163, 0.00087422, 0.00100005,
            0.00087521, 0.00074442, 0.00092733, 0.000946  , 0.00106827,
            0.00100114, 0.00105759, 0.00092259, 0.00063527, 0.00097222,
            0.00068953, 0.00077212, 0.00104793, 0.00096575, 0.00105334,
            0.00083698, 0.00075821, 0.00064072, 0.00063937, 0.00091458,
            0.00057009, 0.0009302 , 0.00044224, 0.00099957, 0.00091566,
            0.00062846, 0.00086104, 0.00088782, 0.00087569, 0.00080001,
            0.00105686, 0.00085158, 0.00090522, 0.00094647, 0.00092804,
            0.00105527, 0.00049176, 0.00091288, 0.00049356, 0.00085637,
            0.00064608, 0.00051553, 0.0004503 , 0.00091421, 0.00080982,
            0.00104289, 0.00104278, 0.00100542, 0.00081652, 0.00080272,
            0.00103477, 0.00064274, 0.00068627, 0.00101523, 0.00090123,
            0.00068775, 0.000584  , 0.0005267 , 0.00081816, 0.00088002,
            0.0007591 , 0.00062319, 0.00077072, 0.00064418, 0.0007176 ,
            0.00093094, 0.00106979, 0.00113942, 0.00114251, 0.00118652,
            0.00115197, 0.00109251, 0.00116904, 0.00110215, 0.00112733,
            0.001132  , 0.00116865, 0.00110937, 0.0011452 , 0.00112376,
            0.00115287, 0.00108392, 0.00109151, 0.00111326, 0.00110079,
            0.0011649 , 0.00114876, 0.0011283 , 0.0011773 , 0.00117432,
            0.00117416, 0.0011727 , 0.00119619, 0.00119871, 0.00121556]),
     'offspring_population_x': array([[ 5.18212316e-04, -1.55451834e-04,  4.06503406e-04,
             -2.76995202e-04],
            [-2.27301749e-05, -3.10553832e-04,  4.06760574e-04,
             -5.86852049e-05],
            [-3.63145918e-04,  5.85416615e-05, -4.40952672e-04,
             -3.13256322e-06],
            [ 9.95674196e-04, -4.36372683e-04, -2.03624100e-04,
              2.28053191e-05],
            [ 2.87784561e-04, -2.95989878e-04,  4.13111303e-04,
              3.15365437e-05],
            [-5.45456843e-04,  1.20178857e-04,  5.80818929e-04,
              2.88909608e-04],
            [ 1.15720021e-04, -3.42010671e-04, -3.25310941e-05,
              8.02426530e-05],
            [-4.74597304e-05,  1.65197013e-05, -4.41023798e-04,
             -5.63946304e-04],
            [-2.02078030e-05,  3.93762321e-04,  1.97318952e-04,
              1.67152998e-04],
            [ 7.44634959e-05, -4.78125776e-04,  2.15605639e-04,
             -5.15349661e-05],
            [ 3.33340069e-04,  2.95707580e-04, -3.24851806e-04,
             -5.89318935e-05],
            [ 2.48241026e-04,  1.35601419e-04, -6.87687844e-04,
              3.94639460e-04],
            [-4.66405751e-04,  2.32896980e-04,  2.40557638e-04,
              9.68757269e-05],
            [ 8.92379911e-05,  2.84123809e-04,  8.24833055e-05,
             -7.05256091e-05],
            [-4.78926189e-04, -2.42408902e-04, -7.41566573e-04,
              4.46365502e-05],
            [-2.36144569e-04,  6.59811189e-04, -5.56439670e-04,
              3.32310755e-04],
            [ 1.54791296e-04,  2.14828761e-04,  2.77535269e-04,
              3.38444782e-05],
            [-8.12456770e-05,  3.18143550e-04, -2.03806116e-04,
              4.17754769e-04],
            [-5.32442414e-04,  8.21606940e-05,  2.37322827e-04,
             -9.12743359e-05],
            [-4.97302035e-04,  1.23465186e-04, -2.07418874e-04,
              1.53824960e-04],
            [ 8.02429387e-06,  7.26930510e-04,  3.98654379e-04,
             -4.78018588e-04],
            [ 9.89600160e-04, -4.17518218e-05,  1.17589159e-04,
             -3.20921041e-04],
            [-1.39219229e-04,  6.48090066e-05, -2.76817227e-04,
              4.45591467e-05],
            [ 1.93854495e-04, -1.56437458e-04,  7.08517127e-04,
             -1.99859727e-05],
            [ 2.64572909e-04, -2.79836837e-04,  3.43452370e-04,
              5.54171905e-04],
            [-2.68579138e-04,  3.28540457e-04, -7.08758639e-05,
              8.38124140e-04],
            [-1.83857274e-04, -3.29080121e-04,  2.24845871e-04,
              1.49454947e-04],
            [-1.26118584e-04, -1.26475657e-04, -1.29772722e-04,
             -2.90680402e-06],
            [-2.05201292e-04,  2.07103659e-04, -4.70445880e-04,
             -8.39762835e-05],
            [ 1.86481234e-04, -2.89669798e-04, -7.30326551e-05,
             -1.03019280e-03],
            [-1.65026776e-04, -3.87476398e-04,  3.53430823e-05,
             -5.81865605e-04],
            [ 2.82112403e-05,  2.93925036e-04,  6.87943031e-05,
              1.22486837e-03],
            [ 5.48417919e-04, -1.58079286e-04, -2.58612903e-04,
              4.98614615e-05],
            [ 7.46341439e-06,  1.62865336e-04, -1.04496521e-04,
              3.91277974e-04],
            [-2.58799497e-04,  1.86887976e-04, -2.39170616e-04,
              5.72853412e-04],
            [ 3.69021367e-04, -1.81990274e-04, -5.50083411e-04,
              2.10680605e-04],
            [ 1.91249814e-04, -1.56579956e-04, -2.78263607e-04,
              2.04332895e-04],
            [ 5.32227750e-04, -1.94490388e-04, -1.56356504e-04,
             -1.82069706e-04],
            [-3.86319702e-04, -2.09900137e-04,  1.66715090e-04,
              3.81535570e-05],
            [ 2.96699453e-04,  3.86338043e-04,  3.10855299e-04,
              2.45004160e-04],
            [ 3.67330935e-04,  3.32071604e-04,  1.76461822e-04,
             -1.07876615e-05],
            [ 2.11977128e-04,  4.27207037e-05,  1.15192738e-04,
              1.52413851e-05],
            [ 6.21986356e-04, -1.46419241e-04,  2.89575604e-04,
             -2.46378978e-04],
            [ 7.60791789e-05, -2.00873630e-04, -1.20294914e-04,
             -9.54107193e-06],
            [ 4.50761302e-05, -4.12936825e-04,  4.22924734e-04,
              7.05306826e-05],
            [ 4.16582479e-04, -1.44190215e-04, -3.36900736e-04,
              8.97951793e-05],
            [-5.90390680e-04,  2.07169149e-04, -2.16348852e-04,
              1.07093817e-03],
            [ 5.33590610e-04, -1.57332338e-04,  1.09607772e-04,
              2.54342900e-05],
            [ 2.40142945e-04, -3.81030094e-04, -5.79561132e-04,
             -3.02832869e-06],
            [-4.49805950e-04,  3.15920118e-04, -8.53673632e-04,
              1.75186606e-04],
            [ 3.35084323e-04, -1.61089600e-04,  3.21047823e-04,
             -1.69504189e-04],
            [ 2.17509510e-04, -3.39509294e-04,  3.58612277e-05,
             -3.25753398e-04],
            [-6.02137301e-04, -1.20068656e-04,  3.11642476e-04,
             -2.24837270e-05],
            [ 3.36846378e-04,  9.81711086e-05, -1.70594597e-04,
              1.16490776e-04],
            [ 2.81642330e-05, -1.52739129e-04,  5.17969078e-04,
             -3.19325960e-04],
            [-2.36300751e-04, -2.16068527e-04, -2.76158151e-04,
              5.38741041e-04],
            [-3.49586193e-04, -1.66146206e-04,  4.48315687e-04,
              4.69340807e-04],
            [ 2.99526915e-04, -1.63039371e-04,  4.25817664e-04,
             -3.21432062e-04],
            [ 1.00535751e-04, -4.93495574e-04,  4.65836565e-04,
              4.49929055e-04],
            [ 3.46727901e-04,  6.22442945e-05, -2.16615893e-04,
             -1.75575893e-04],
            [ 2.43917400e-04, -6.11503063e-04, -1.61765890e-06,
              3.20597549e-05],
            [-1.90367311e-04,  1.97589886e-04,  7.49104853e-05,
              6.35680559e-05],
            [-3.03928659e-05,  4.68862826e-04,  4.00466881e-04,
              2.39565946e-04],
            [ 2.48064153e-04, -2.86505338e-04,  5.21778248e-05,
              1.41770935e-04],
            [ 3.62389385e-05, -1.16208205e-05,  3.11008987e-04,
              3.07097813e-04],
            [ 4.82589480e-04,  2.44942720e-04, -2.97122054e-04,
              3.36193306e-04],
            [-2.70672223e-04, -4.86872239e-05,  1.41005437e-04,
              3.42888969e-05],
            [-2.53907110e-04,  4.33154409e-04,  3.70404122e-04,
              3.13461488e-05],
            [-2.76161294e-04, -2.90384008e-04,  3.39522679e-04,
             -1.57713708e-04],
            [ 7.27938881e-05, -2.93554239e-04, -1.89959058e-04,
              2.38449920e-05],
            [-2.72211575e-04, -2.24782753e-04, -2.71124433e-04,
              1.31123534e-04],
            [ 9.40205246e-05, -1.75234549e-05, -3.72942300e-04,
             -2.45349233e-04],
            [-9.19180665e-04,  4.47264323e-04, -9.41800157e-05,
             -2.39909407e-04],
            [-1.59243064e-05, -8.80759003e-05,  1.33531746e-04,
             -2.78311536e-04],
            [ 3.37293005e-04, -6.01410803e-04,  6.57455995e-04,
             -2.65003616e-04],
            [ 6.20968463e-04, -1.35779293e-04, -4.62171306e-04,
              1.11482408e-04],
            [ 2.17410763e-04, -2.48354488e-04,  8.20798404e-05,
              1.79057951e-04],
            [ 3.75557819e-05,  2.93919106e-04, -4.70921758e-04,
              4.06149430e-04],
            [ 7.34950820e-05, -2.31711429e-04,  2.51369365e-04,
              1.45113960e-04],
            [ 1.31900827e-04, -9.25383490e-05,  3.75474924e-04,
             -3.85247260e-04],
            [-1.72587798e-05, -1.68726973e-05,  3.44798241e-05,
              8.06806454e-04],
            [-7.60028484e-04,  1.97477990e-04, -3.91228335e-04,
              3.60044441e-05],
            [ 2.70196581e-04,  2.33152378e-04,  2.38487227e-04,
             -6.09035788e-04],
            [-2.35455612e-04, -7.02412707e-05,  5.03244869e-05,
              7.87659247e-05],
            [-1.15656862e-04, -1.48051708e-04,  2.80758728e-04,
              5.99211304e-05],
            [-8.17012112e-04,  1.53896134e-05, -1.40257590e-04,
             -3.10084442e-04],
            [-5.06928721e-04,  3.77580746e-04, -4.09682853e-05,
              3.91492445e-04],
            [ 5.10394702e-04, -6.88402699e-04,  4.26852097e-05,
             -2.76853124e-04],
            [ 2.33082471e-04,  5.28626252e-04,  4.24719177e-04,
             -1.31690148e-04],
            [-2.44780242e-04,  1.60996980e-04,  4.95401052e-04,
              6.84259354e-04],
            [ 2.38457537e-04, -2.42928546e-04, -1.08453900e-03,
             -3.60772652e-04],
            [-3.89700396e-04, -1.62451728e-04,  2.26347858e-04,
              7.03928369e-04],
            [ 3.88714949e-04, -2.47170584e-04, -7.10538878e-04,
             -3.02945896e-04],
            [-3.51456239e-04,  9.28505662e-05,  3.16744561e-04,
             -1.53215636e-04],
            [-2.40518566e-04,  7.02313938e-04,  4.99071153e-04,
              5.76975716e-04],
            [-5.68486340e-05, -2.09709517e-04,  7.14518539e-05,
              2.54740924e-04],
            [ 2.74537701e-04,  3.50762429e-05, -1.17803928e-04,
             -1.11173357e-04],
            [-7.94527673e-05, -1.82733251e-04, -3.03252733e-04,
              5.82923871e-04],
            [-4.30590408e-04, -2.94643643e-04,  3.61063067e-04,
              5.49722116e-04],
            [ 2.36137728e-04,  1.69480306e-04, -2.40383318e-04,
              1.94924215e-04],
            [-2.17071097e-04,  3.45732241e-05,  3.53081001e-05,
              3.32676371e-04],
            [ 4.74145456e-04, -1.35013678e-05,  1.60219619e-04,
              1.93463444e-05],
            [ 1.48603894e-04,  4.49411137e-04, -3.98643996e-04,
              3.75798261e-05],
            [ 3.94981086e-05,  7.51755811e-05,  5.39043591e-04,
              4.69707775e-04],
            [-1.45611448e-04, -4.98883002e-04,  2.00854182e-04,
              2.39671750e-04],
            [-8.61154691e-05,  2.21122483e-04,  1.19121323e-04,
              6.06269108e-04],
            [-4.38320404e-04, -1.72129627e-04,  8.38319630e-04,
              8.99032664e-05],
            [-3.06806563e-04,  1.20023099e-04,  2.86442317e-05,
              5.84638979e-04],
            [ 1.90461287e-04, -5.10180901e-04,  1.06085833e-04,
             -4.09389410e-04],
            [ 9.12311647e-05, -3.44506057e-04,  1.56111911e-04,
              7.29014019e-04],
            [-3.67477328e-04, -7.93973212e-05, -5.00472137e-04,
             -4.88786688e-04],
            [ 5.60241448e-05,  4.52271923e-04,  3.65974106e-04,
              1.99263601e-04],
            [ 5.50223269e-04, -1.43617718e-04,  4.97132131e-04,
             -5.00290576e-04],
            [ 4.47749964e-04, -4.98203007e-06, -4.80902964e-04,
              2.15272852e-04],
            [-3.26356638e-04, -1.15195661e-04, -1.43094380e-04,
              1.51054575e-04],
            [ 1.98036766e-04, -3.71917510e-04,  1.73357084e-04,
             -9.33068419e-06],
            [ 8.61257833e-05,  1.16757864e-04, -1.26081915e-04,
             -1.16590530e-04],
            [ 5.19599531e-04,  2.04903323e-04, -6.41019320e-05,
             -1.58326646e-04],
            [-1.41248667e-04, -6.34885365e-04,  1.28935128e-04,
              5.89821576e-04],
            [-2.30960981e-04, -1.19332084e-04, -5.29461208e-04,
              2.99241224e-04],
            [ 4.25677636e-04, -6.56047693e-05,  2.16414483e-04,
             -3.31141086e-04],
            [-2.21445953e-04, -1.29217852e-04,  2.14138757e-05,
             -4.75206824e-06],
            [-1.95260767e-04,  5.69751844e-05, -3.91186801e-04,
              4.84962090e-04],
            [ 3.41176698e-04,  5.56653309e-04, -9.08436733e-05,
              4.96796744e-04],
            [ 5.43885747e-04, -2.51754655e-04, -1.12783574e-04,
             -2.74722406e-04],
            [ 7.91114991e-05,  5.49710476e-04,  3.81260872e-04,
              4.66055131e-05],
            [ 3.88857929e-04, -2.53340340e-04, -3.57033774e-04,
              3.08705474e-05],
            [-2.43790895e-04,  1.76528674e-04, -5.20536244e-05,
             -1.02965507e-04],
            [ 5.93195364e-05, -2.51219635e-04,  1.97710797e-04,
             -5.85150262e-04],
            [ 2.18818901e-04,  3.64475624e-04, -3.90196685e-05,
             -7.64745922e-06],
            [ 1.62246292e-04,  5.26197626e-04,  2.69653079e-04,
             -7.16748352e-05],
            [ 1.88706733e-04,  3.75379792e-04, -8.16209781e-05,
              1.54596612e-04],
            [-3.35056852e-04, -4.36391948e-04, -9.79203156e-05,
             -1.22981618e-04],
            [ 4.58161260e-04,  4.73359795e-04, -1.15488850e-04,
              2.39556872e-04],
            [-3.58785766e-05, -3.08123126e-04,  3.43028094e-04,
             -9.87285357e-06],
            [ 7.86543459e-05, -3.42172430e-04,  3.73685126e-04,
             -7.17398338e-04],
            [ 1.10924250e-04,  1.46984262e-04,  7.29567306e-05,
              4.05462727e-04],
            [ 2.67332739e-04, -2.59408000e-04,  1.30176328e-03,
             -1.45062679e-04],
            [-1.25847785e-04, -3.21295973e-04,  3.61430229e-04,
             -1.66102033e-04],
            [-3.20828467e-04,  5.69563835e-04,  2.81313896e-04,
              3.59036021e-04],
            [ 3.77812702e-05,  2.65826494e-04,  2.86378942e-04,
             -7.10802972e-05],
            [-4.25665832e-04, -1.99120171e-04,  1.06427267e-04,
              2.52063237e-04],
            [ 1.00242660e-04, -4.52008963e-04, -5.00667358e-04,
              3.81415016e-04],
            [ 2.28201332e-04, -3.28878049e-04, -1.86464314e-04,
             -2.99001219e-05],
            [ 1.83551757e-05,  7.98850902e-05,  1.72827685e-04,
             -3.84325324e-04],
            [ 2.80994498e-04,  4.13510247e-04, -7.29267762e-05,
             -4.87881881e-04],
            [ 7.02411372e-05,  1.07896782e-03,  2.76577272e-04,
             -3.97402621e-04],
            [-7.22432770e-05,  8.55235153e-05,  2.42480901e-04,
              1.64314821e-04],
            [ 3.13433070e-04,  1.16601767e-04, -1.51027606e-03,
              4.61899659e-06],
            [-1.65777972e-04, -2.61356966e-04, -8.88899914e-06,
              4.42435793e-04],
            [-2.99642092e-04,  2.08135265e-04,  5.44486395e-05,
              2.68832445e-04],
            [ 2.77486314e-05, -3.15162352e-04,  2.91711082e-04,
             -2.50886289e-04],
            [ 2.67617376e-04,  1.24227259e-04,  4.89940691e-04,
             -4.49768664e-04],
            [ 2.35286086e-04, -3.94100766e-04,  3.26486067e-04,
             -9.01616431e-05],
            [ 3.29217668e-05,  1.55401987e-05,  2.18162764e-04,
             -1.78948762e-04],
            [ 7.94017923e-06,  2.65772504e-04,  5.10083033e-04,
             -8.90003907e-05],
            [ 2.27661686e-04, -3.57137876e-05,  6.13094603e-06,
             -5.74753630e-04],
            [-3.70273900e-05,  6.63808634e-04, -1.24329662e-04,
              6.12705279e-04],
            [ 1.52363483e-04, -5.10888637e-05, -4.54774831e-04,
             -4.99031678e-04],
            [-2.13982000e-04,  4.29170310e-04,  1.39128762e-04,
              2.28355283e-04],
            [ 1.85879081e-04, -1.74559268e-04, -4.73689282e-05,
             -3.74948984e-04],
            [-3.24179246e-04,  4.64762664e-04, -1.95731131e-04,
             -2.54216393e-04],
            [-9.54569206e-05, -2.03328562e-04, -9.38740516e-04,
              8.16070955e-05],
            [-1.40650896e-04,  5.44881345e-04,  4.35896247e-04,
              2.98118422e-04],
            [-2.45609345e-05,  1.12129128e-04,  2.10138237e-04,
             -2.10785610e-04],
            [ 4.51519116e-04,  1.62093332e-04,  2.79928477e-04,
              3.48675312e-04],
            [-2.77591977e-04,  6.67211912e-05, -4.60189806e-04,
              5.44312053e-05],
            [-3.18594135e-04, -1.30585877e-04,  1.13985357e-04,
              1.07016794e-04],
            [ 3.12961001e-05, -2.03980392e-04, -2.00330715e-04,
              3.02396743e-04],
            [ 1.64221445e-04,  2.56752971e-04,  3.02803732e-04,
             -3.01446524e-04],
            [ 2.63106379e-04,  3.69029718e-04, -5.43250203e-05,
             -4.01027621e-04],
            [-5.50538972e-05, -3.41865593e-04,  2.57938968e-04,
              2.12710968e-04],
            [-2.10691094e-04, -3.77971484e-04, -2.91798653e-04,
             -1.54698454e-05],
            [ 8.37080766e-04,  1.62328384e-04,  1.64547857e-04,
              4.27810704e-05],
            [-1.06308335e-04, -9.57899804e-05,  3.10949741e-04,
              3.39475980e-05],
            [-2.23457769e-04, -8.74874323e-05, -1.68914175e-04,
             -3.85570688e-04],
            [ 4.81561169e-04,  2.03211305e-04, -4.23069709e-04,
              4.21504795e-04],
            [ 2.46846671e-04, -8.84489546e-05, -3.76975388e-04,
             -2.51041111e-05],
            [ 7.90059873e-05, -1.01717188e-04,  5.46385577e-04,
             -5.32720652e-05],
            [-2.56279245e-04, -1.60463408e-04,  3.44363879e-04,
             -3.08880973e-04],
            [ 9.38868713e-05, -2.05524433e-04,  5.86081463e-04,
              2.85387126e-04],
            [ 2.70893112e-04, -1.73153484e-04, -5.18576554e-04,
             -4.22221187e-04],
            [ 6.97592746e-05, -2.02858979e-04, -6.72118806e-04,
              4.92996482e-04],
            [ 1.20468753e-04,  4.03830938e-04,  5.85252783e-05,
             -3.10896685e-04],
            [ 1.08848172e-04,  2.93594500e-04,  9.24102056e-05,
              3.77265558e-04],
            [-1.96285549e-04,  1.38530838e-04,  3.84576076e-04,
              8.97181931e-05],
            [ 2.45381266e-04, -9.59688727e-05, -2.76540561e-04,
             -2.10936988e-04],
            [ 3.19781512e-04,  3.60168370e-05,  4.56069940e-04,
              2.34261097e-04],
            [ 4.51372537e-04,  1.43047973e-04,  3.21331753e-04,
              4.11865431e-04],
            [ 3.67970850e-04, -3.69992518e-04, -1.44160747e-04,
             -4.14353023e-04],
            [-2.90489854e-04, -1.28465891e-04, -3.70762526e-04,
             -1.00096971e-04],
            [ 5.19709569e-04,  5.29174405e-04,  6.45275703e-04,
              8.29861717e-05],
            [ 1.17039078e-04, -2.38823396e-04, -8.13583121e-04,
              2.22039123e-05],
            [ 3.80038972e-04,  1.78766479e-04, -1.08703736e-04,
             -4.19441405e-05],
            [ 1.86966624e-04, -2.19048159e-04,  4.49177211e-04,
              2.27906264e-04],
            [ 5.08701125e-04, -2.76255705e-04,  2.03900020e-04,
              5.69909030e-04],
            [ 6.30638672e-04, -4.13931894e-04, -1.18285887e-04,
             -1.54323514e-04],
            [-2.39599319e-04, -8.56343494e-05, -3.21039629e-04,
             -2.18728297e-04],
            [ 5.73770430e-05, -1.48959106e-04,  5.53157631e-04,
             -1.33194307e-04],
            [ 2.97547490e-04,  1.00331958e-04, -4.30648365e-04,
             -5.70929789e-06]]),
     'offspring_population_sigma': array([[2.05272308e-04, 1.50506120e-04, 1.68639568e-04, 1.06385209e-04],
            [1.45235027e-04, 1.58240758e-04, 1.03907220e-04, 1.15714038e-04],
            [1.10637235e-04, 1.64437846e-04, 7.17047999e-05, 1.10521619e-04],
            [4.44559141e-04, 2.27531554e-04, 3.44308222e-04, 6.27891582e-05],
            [2.23138880e-04, 4.37375264e-05, 1.17421795e-04, 3.39113602e-05],
            [4.15808603e-04, 4.30648343e-05, 1.74482182e-04, 5.71032612e-05],
            [2.03002766e-04, 2.36143162e-04, 1.09495669e-04, 1.30024149e-04],
            [1.30768285e-04, 1.98937753e-04, 5.17600907e-04, 3.42962478e-04],
            [3.09539126e-05, 4.04608444e-04, 1.58608623e-04, 1.21744389e-04],
            [1.36252389e-04, 6.89158547e-05, 3.47938125e-04, 9.75053967e-05],
            [1.47687044e-04, 1.83958809e-04, 1.19266888e-04, 1.48193069e-04],
            [8.18659465e-05, 9.99758357e-05, 1.75989678e-04, 2.55544623e-04],
            [2.13715619e-04, 6.24279012e-05, 1.27467971e-04, 1.46676210e-04],
            [6.09652126e-04, 8.12611693e-05, 1.30397872e-04, 1.29866728e-04],
            [1.70865954e-04, 5.67403206e-05, 4.23004342e-04, 8.14991245e-05],
            [1.44604128e-04, 2.88419784e-04, 2.60462138e-04, 1.52100825e-04],
            [1.38301581e-04, 7.93359762e-05, 8.10546323e-05, 1.60415977e-04],
            [2.20250750e-04, 1.14336169e-04, 4.88174562e-05, 4.16764967e-05],
            [4.44511152e-04, 1.06903245e-04, 3.24288894e-04, 2.61888278e-04],
            [9.80780684e-05, 1.96736899e-04, 2.47569442e-04, 3.64689399e-05],
            [5.98533684e-05, 1.93008675e-04, 1.19405190e-04, 2.64620561e-04],
            [3.60836395e-04, 1.06778085e-04, 7.40963589e-04, 1.66569269e-04],
            [8.48429249e-05, 4.89080595e-05, 5.25484058e-05, 2.67184567e-04],
            [1.83582685e-04, 5.67964075e-05, 2.61366428e-04, 1.35223844e-04],
            [3.09691043e-04, 1.62334680e-04, 9.06595671e-05, 1.32911898e-04],
            [1.89744879e-04, 5.55156792e-05, 6.38490278e-05, 1.24336434e-04],
            [4.07180431e-04, 8.62721469e-05, 3.74800330e-04, 1.45817504e-04],
            [5.99181266e-05, 3.56477150e-04, 1.25268757e-04, 1.09662996e-04],
            [1.50797129e-04, 4.58682619e-05, 4.72256638e-04, 1.50389456e-04],
            [1.88130889e-04, 1.64136426e-05, 2.72936329e-04, 1.86378801e-04],
            [1.85350640e-04, 7.56572507e-05, 1.54836008e-04, 1.17816221e-04],
            [6.07442764e-05, 8.12253725e-05, 5.36742116e-05, 3.25209010e-04],
            [2.61969297e-04, 1.09831047e-04, 8.74645050e-05, 1.03963005e-04],
            [2.03221179e-04, 2.25569930e-04, 5.89152898e-04, 2.49799494e-04],
            [1.05468883e-04, 4.98707703e-05, 5.77153448e-04, 1.10323135e-04],
            [9.45364459e-05, 2.98421272e-04, 2.44419385e-04, 1.16109846e-04],
            [1.92781364e-04, 1.18512320e-04, 2.83067440e-04, 1.08897875e-04],
            [1.93168424e-04, 2.65454610e-04, 1.15150715e-04, 7.41930491e-05],
            [1.35696192e-04, 1.74672024e-05, 9.03372163e-05, 1.09089103e-04],
            [2.29317411e-04, 3.53501883e-05, 1.82435396e-04, 2.15962119e-04],
            [4.04851316e-04, 1.05896503e-04, 4.66593481e-05, 1.58148657e-04],
            [2.05586063e-04, 1.77355708e-04, 1.03249507e-04, 9.85144148e-05],
            [1.25865753e-04, 6.68847843e-05, 1.62873125e-04, 1.31479686e-04],
            [1.40781170e-04, 5.15793279e-05, 1.23080643e-04, 9.56292933e-05],
            [1.79241582e-04, 8.97309046e-05, 4.06936785e-04, 1.19686496e-04],
            [1.09831705e-04, 3.95749304e-05, 2.30782692e-04, 7.77866463e-05],
            [2.65701066e-04, 2.25685507e-04, 1.64486771e-04, 3.89558909e-04],
            [4.22648254e-04, 5.67930441e-05, 1.81433351e-04, 5.63178112e-05],
            [2.55508108e-04, 1.85241344e-04, 3.82121990e-04, 2.12117332e-04],
            [2.89118899e-04, 3.14683698e-05, 6.49777344e-04, 6.91614246e-05],
            [2.63808392e-04, 5.77934578e-05, 7.96642488e-05, 2.35617101e-04],
            [2.07506346e-04, 5.73967768e-05, 9.18441919e-05, 3.78162659e-04],
            [5.30853183e-04, 1.94826626e-05, 1.22946358e-04, 1.89729664e-04],
            [2.09375675e-04, 2.97830016e-04, 1.43146208e-04, 1.57184169e-04],
            [1.70910965e-04, 3.61316203e-05, 1.08598075e-04, 1.41149170e-04],
            [9.62011705e-05, 1.27818392e-04, 2.49335145e-04, 6.89395522e-05],
            [1.20280798e-04, 4.10715279e-05, 1.16539031e-04, 4.47327434e-05],
            [6.63967905e-05, 1.19539772e-04, 1.54188927e-04, 1.82006607e-04],
            [1.97176184e-04, 3.87021859e-05, 8.68380953e-05, 9.92251746e-05],
            [1.54274420e-04, 1.16206640e-04, 1.19172439e-04, 6.42886415e-05],
            [2.47103261e-04, 1.63807297e-04, 2.65665016e-04, 2.55562099e-04],
            [2.00509679e-04, 2.68889258e-05, 9.94749860e-05, 1.48349072e-04],
            [9.83324075e-05, 1.83402754e-04, 5.73223596e-05, 2.24013845e-04],
            [1.41920633e-04, 1.96234633e-04, 1.66479276e-04, 1.12060653e-04],
            [2.04329844e-04, 3.72391837e-04, 3.88107340e-05, 1.74515242e-04],
            [1.65677675e-04, 5.96574151e-05, 7.23566574e-05, 7.38478575e-05],
            [7.16420563e-05, 8.16727624e-05, 6.82151241e-05, 3.44364767e-05],
            [1.14306888e-04, 3.08349936e-04, 2.23370317e-04, 1.06898910e-04],
            [2.38347115e-04, 7.52702139e-05, 1.37750951e-04, 9.59518790e-05],
            [2.60757141e-05, 8.66468358e-05, 1.50365383e-04, 1.68273030e-04],
            [4.62838680e-04, 1.43158920e-04, 7.92647204e-05, 4.53654741e-05],
            [1.98536664e-04, 1.38826246e-04, 9.29880879e-05, 1.45457430e-04],
            [3.44361114e-04, 8.04178156e-05, 1.53691205e-04, 1.13746437e-04],
            [1.75226397e-04, 1.17549719e-04, 1.91232873e-04, 1.33981838e-04],
            [2.50968188e-04, 4.62366865e-05, 3.72584605e-04, 6.63305854e-05],
            [6.00285617e-05, 2.47236347e-04, 7.07119484e-05, 2.92473833e-04],
            [2.18628460e-04, 1.62297239e-04, 1.80892094e-04, 5.20863080e-05],
            [2.78762887e-04, 8.88068215e-05, 4.54184727e-04, 1.20056893e-04],
            [1.41824816e-04, 2.99848064e-04, 3.49875164e-04, 6.37376123e-05],
            [1.12424881e-04, 2.87343792e-05, 3.53347288e-04, 2.08930646e-04],
            [5.54227121e-04, 2.46129288e-04, 1.37289012e-04, 5.22745503e-04],
            [2.26268439e-04, 4.97942140e-05, 8.19531232e-05, 9.08660668e-05],
            [4.24740918e-05, 8.40266431e-05, 6.66251311e-04, 1.30329639e-04],
            [3.35322436e-04, 8.21181256e-05, 1.82860131e-04, 1.08862153e-04],
            [1.23398126e-04, 3.87441542e-05, 2.26237643e-04, 1.88334146e-04],
            [6.93996333e-04, 1.33395996e-04, 3.73650607e-04, 9.48837796e-05],
            [3.06739108e-04, 1.12352996e-04, 9.48017567e-05, 9.21438845e-05],
            [3.12715284e-04, 3.51712498e-04, 3.56616292e-05, 1.91737923e-04],
            [1.11500624e-04, 1.40787223e-04, 2.65399763e-04, 1.74573114e-04],
            [1.35340969e-04, 5.01424977e-05, 2.98810980e-04, 6.79552896e-05],
            [3.26399031e-05, 1.48216583e-04, 2.41598553e-04, 2.64909792e-04],
            [4.93728789e-04, 1.34845773e-04, 1.33790618e-04, 6.18965054e-04],
            [2.43995465e-04, 2.08275535e-04, 5.31688875e-05, 1.82448988e-04],
            [1.15421219e-04, 4.00376883e-05, 6.13785858e-05, 1.04718871e-04],
            [1.89711139e-04, 4.20427146e-04, 1.11417606e-04, 7.21783790e-05],
            [1.14965011e-04, 1.05020338e-04, 4.86650697e-04, 2.53715092e-04],
            [1.13523142e-04, 1.25432787e-04, 2.36894431e-04, 4.52601974e-05],
            [1.19406382e-04, 1.48867004e-04, 1.34657123e-04, 1.32488399e-04],
            [2.73231729e-04, 1.20854581e-04, 1.28840494e-04, 2.00815332e-04],
            [1.46809265e-04, 9.82574953e-05, 1.93716585e-04, 1.47341346e-04],
            [1.69948187e-04, 5.27768509e-05, 4.44864531e-04, 1.11617191e-04],
            [2.20135672e-04, 1.93796493e-04, 8.45730393e-05, 4.50109650e-04],
            [6.86544291e-05, 5.51605565e-05, 3.22930120e-04, 1.32521882e-04],
            [1.65051430e-04, 1.29058708e-04, 3.21275004e-04, 3.33472253e-04],
            [4.48333468e-05, 4.33101320e-05, 1.44695360e-04, 7.06602591e-05],
            [1.21337821e-04, 4.37825001e-05, 1.48104775e-04, 6.61859934e-05],
            [7.83003309e-05, 6.05521058e-05, 2.01759002e-04, 1.82526822e-04],
            [9.80398040e-05, 1.78437623e-05, 1.25966112e-04, 9.65744113e-05],
            [1.53848370e-04, 1.73589166e-04, 1.72478611e-04, 1.80763189e-04],
            [1.97851120e-04, 2.34747679e-04, 1.04504001e-04, 3.36312021e-04],
            [3.36894258e-04, 3.18365061e-05, 6.38844861e-05, 3.22341412e-05],
            [1.48107802e-04, 4.16375118e-05, 1.12165096e-04, 3.73765558e-04],
            [1.11161673e-04, 3.62210668e-05, 4.75998827e-04, 1.52756709e-04],
            [1.27267000e-04, 2.92964195e-04, 2.87508259e-04, 4.28631108e-05],
            [2.60969368e-04, 4.57840391e-05, 8.28481420e-05, 2.31966388e-04],
            [1.11990709e-04, 5.81569992e-05, 1.70111185e-04, 3.28414837e-04],
            [4.83290749e-05, 2.11751834e-04, 6.31690895e-05, 9.44938483e-05],
            [2.94330299e-04, 4.10559458e-05, 1.88474958e-04, 2.75516888e-04],
            [5.74521152e-05, 1.42423817e-04, 2.57824109e-04, 1.34672064e-04],
            [5.34793425e-04, 5.49170682e-05, 2.61231589e-05, 4.67033675e-05],
            [2.60345753e-04, 1.58894445e-04, 6.85355002e-05, 1.45194439e-04],
            [6.48779493e-05, 1.20337020e-04, 2.53010410e-04, 5.39778784e-05],
            [3.47012599e-04, 1.64251615e-04, 1.04169888e-04, 9.67823425e-05],
            [2.20251177e-04, 1.55294074e-04, 1.23066099e-04, 1.15844833e-04],
            [5.71202270e-05, 7.84454663e-05, 6.31971391e-04, 9.57282560e-05],
            [6.84436310e-05, 1.83867146e-04, 2.12212097e-04, 5.60409432e-05],
            [3.06040460e-04, 1.34206994e-04, 2.13757796e-04, 1.47327121e-04],
            [1.75902288e-04, 7.57745914e-05, 4.54010969e-05, 7.69729938e-05],
            [1.41253668e-04, 5.17872252e-05, 2.62880490e-04, 1.21905517e-04],
            [7.01712785e-05, 1.36835546e-04, 2.40014792e-04, 9.12722336e-05],
            [1.32845591e-04, 4.75850011e-05, 2.93922399e-04, 8.58184665e-05],
            [7.47638228e-05, 2.74569741e-04, 7.03228268e-05, 1.22358958e-04],
            [3.22250285e-04, 8.67532154e-05, 5.57512864e-05, 1.18415630e-04],
            [2.72558109e-04, 1.08412620e-04, 8.13570474e-05, 1.59432280e-04],
            [3.39531010e-04, 9.14142780e-05, 3.06200174e-04, 7.86954114e-05],
            [2.34482395e-04, 4.67184202e-05, 1.23018126e-04, 3.76103905e-04],
            [2.57858615e-04, 6.33760094e-05, 8.72071419e-05, 1.19967645e-04],
            [2.60070967e-04, 9.71050914e-05, 8.69705647e-04, 1.50736691e-04],
            [1.91342965e-04, 1.03241742e-04, 4.17077754e-04, 1.53279067e-04],
            [2.28783730e-04, 3.34393682e-05, 5.02422407e-04, 1.00440107e-04],
            [1.09648995e-04, 8.78968089e-05, 6.72299088e-05, 1.93212631e-04],
            [8.36077578e-05, 2.05601417e-05, 2.02352663e-04, 1.20479137e-04],
            [6.11719722e-05, 6.44741290e-05, 9.05896876e-05, 7.71393568e-05],
            [1.73053227e-04, 1.34160316e-04, 8.08819823e-05, 5.60656061e-04],
            [8.82348968e-05, 7.84995906e-05, 9.04392079e-05, 9.78123200e-05],
            [1.43972855e-04, 5.26594402e-05, 1.36737855e-04, 1.71174019e-04],
            [1.54054689e-04, 4.95861935e-04, 3.70934768e-05, 2.92585647e-04],
            [5.45037098e-05, 9.62665631e-05, 1.17073132e-04, 5.24761218e-05],
            [2.31523083e-04, 1.53628808e-04, 8.55535879e-04, 8.89876822e-05],
            [3.29996226e-04, 7.15247938e-05, 3.86598173e-04, 2.73198469e-04],
            [1.13611221e-04, 8.34214570e-05, 9.91494942e-05, 2.79237282e-05],
            [5.75508753e-04, 9.24778733e-05, 1.59100146e-04, 1.27939300e-04],
            [1.35606378e-04, 1.25351531e-04, 1.21961927e-04, 1.47924604e-04],
            [2.02482959e-04, 8.00076958e-05, 1.82411499e-04, 2.29456482e-04],
            [1.24327403e-04, 1.07672908e-04, 8.03732003e-05, 7.74401743e-05],
            [8.96695564e-05, 3.83356973e-05, 2.07080494e-04, 7.12926046e-05],
            [2.87219539e-04, 9.96590447e-05, 1.02666408e-04, 9.99745172e-05],
            [9.94031416e-05, 8.98567974e-05, 1.97390479e-04, 1.97632816e-04],
            [2.08500449e-04, 6.83674927e-05, 5.51014655e-05, 6.67251289e-05],
            [3.58152330e-04, 4.28956219e-05, 9.96959604e-05, 1.18535794e-04],
            [1.09745224e-04, 2.80244688e-04, 1.20213218e-04, 1.48362404e-04],
            [8.37041769e-05, 1.93074159e-04, 1.95671812e-04, 7.35698103e-05],
            [1.95832916e-04, 5.50178012e-05, 2.85865807e-04, 1.55585885e-04],
            [2.01034668e-04, 3.88603276e-04, 5.39704978e-05, 4.86450327e-05],
            [1.97844216e-04, 1.07749793e-04, 1.27835426e-04, 1.79260646e-04],
            [1.61025311e-04, 7.76069367e-05, 1.28668699e-04, 8.04169120e-05],
            [1.05046557e-04, 6.84013119e-05, 7.67377427e-04, 4.15440191e-05],
            [2.78798368e-04, 5.40772364e-05, 1.39298726e-04, 7.69439557e-05],
            [4.68066257e-04, 4.97484698e-05, 4.06232452e-04, 1.81251712e-04],
            [1.97791909e-04, 8.75631480e-05, 1.04151262e-04, 2.17376780e-04],
            [5.35733545e-05, 5.00916433e-05, 1.28812917e-03, 1.66926116e-04],
            [1.18115340e-04, 8.54208332e-05, 2.76179897e-04, 1.25620430e-04],
            [5.93229149e-05, 2.51114600e-04, 1.95240814e-04, 7.98311426e-05],
            [2.92815438e-04, 5.46420363e-05, 1.62868813e-04, 2.37162179e-04],
            [6.84064961e-05, 4.20415725e-05, 4.18139702e-05, 1.61721031e-04],
            [3.61268544e-04, 5.92951726e-05, 4.34681519e-04, 4.01623959e-04],
            [1.94220167e-04, 9.50242445e-05, 1.62760082e-04, 2.80355410e-04],
            [3.18451336e-05, 8.27454001e-05, 1.08434888e-04, 1.54355850e-04],
            [9.08018830e-05, 7.62689806e-05, 3.85548290e-04, 1.56833972e-04],
            [1.72512002e-04, 3.92935330e-05, 1.38849385e-04, 1.64226558e-04],
            [2.92043549e-04, 2.48651361e-05, 1.08482095e-04, 1.80732017e-04],
            [7.61038977e-05, 2.69711593e-05, 8.54185557e-05, 1.26703332e-04],
            [8.64655613e-05, 7.13624209e-05, 9.90473778e-05, 7.21675883e-05],
            [1.63893311e-04, 1.11905194e-04, 7.51948474e-05, 6.16851866e-05],
            [4.53125051e-05, 5.31000811e-05, 1.28953619e-04, 4.43171762e-05],
            [2.01715406e-04, 7.92898811e-05, 9.55340117e-05, 1.04677017e-04],
            [1.05073345e-04, 4.96710213e-05, 1.73972998e-04, 7.67749860e-05],
            [1.07831149e-04, 8.92733990e-05, 2.53742202e-04, 8.90320087e-05],
            [2.71000732e-04, 6.35917093e-05, 1.10321583e-04, 1.21192976e-04],
            [1.73995105e-04, 5.60283465e-05, 2.45710253e-04, 1.75136136e-04],
            [7.56893172e-05, 1.21069623e-04, 1.33719056e-04, 1.11211808e-04],
            [3.41731435e-04, 3.82979571e-05, 1.26348441e-04, 4.79246287e-05],
            [3.12549635e-04, 6.64022684e-05, 2.47021291e-04, 1.28340207e-04],
            [1.87343970e-04, 3.40289913e-04, 5.08992439e-04, 6.75636177e-05],
            [1.28594537e-04, 1.55898727e-04, 1.25356957e-04, 1.60923268e-04],
            [1.04741282e-04, 5.42411437e-05, 1.65258184e-04, 2.20270459e-04],
            [2.56864935e-04, 5.52322722e-05, 2.30496978e-04, 8.08933033e-05],
            [1.87826810e-04, 2.29324229e-04, 5.95640156e-04, 9.86553337e-05],
            [2.33205388e-04, 1.43141536e-04, 3.24775569e-04, 7.43362623e-05],
            [9.48617222e-05, 8.43544786e-05, 2.77094066e-04, 1.42555987e-04]]),
     'offspring_population_fitness': array([0.00146956, 0.00103477, 0.00115287, 0.00222878, 0.00117432,
            0.00172181, 0.00074442, 0.00144222, 0.000946  , 0.00106827,
            0.00111326, 0.00169308, 0.00116904, 0.00063527, 0.00184426,
            0.00192124, 0.00077212, 0.00114251, 0.00119619, 0.00115197,
            0.00192627, 0.0021102 , 0.00064072, 0.00151011, 0.00152206,
            0.00189601, 0.0009302 , 0.00044224, 0.00112376, 0.00219322,
            0.0014452 , 0.00254487, 0.00126243, 0.00087569, 0.00140258,
            0.00144392, 0.00085158, 0.0012358 , 0.00094647, 0.00126055,
            0.00105527, 0.00049176, 0.00149446, 0.00049356, 0.00119871,
            0.0011283 , 0.0025392 , 0.00113942, 0.00147517, 0.00207479,
            0.00104289, 0.00104278, 0.00138416, 0.00081652, 0.00126125,
            0.00137596, 0.001519  , 0.00127173, 0.0016498 , 0.00090123,
            0.00132406, 0.000584  , 0.00133026, 0.00081816, 0.00088002,
            0.00141256, 0.00062319, 0.00125463, 0.00110079, 0.0007176 ,
            0.00093094, 0.00091586, 0.00212322, 0.00064418, 0.00199083,
            0.00159593, 0.00077072, 0.00138403, 0.0007591 , 0.00112733,
            0.0016245 , 0.00176639, 0.00149758, 0.0005267 , 0.00068775,
            0.00178082, 0.00149666, 0.00181401, 0.00146516, 0.00179891,
            0.00240411, 0.0017126 , 0.00180947, 0.00101523, 0.002144  ,
            0.00068627, 0.00064274, 0.00137955, 0.00168841, 0.00085155,
            0.00080272, 0.00100542, 0.00124509, 0.00144691, 0.00121795,
            0.00132956, 0.00194386, 0.00134937, 0.00138534, 0.00166177,
            0.00159677, 0.00124012, 0.00182289, 0.00138928, 0.00080982,
            0.00091421, 0.0004503 , 0.0011727 , 0.00178536, 0.00132864,
            0.00117416, 0.00051553, 0.00131658, 0.00165992, 0.00134369,
            0.00135659, 0.0011773 , 0.00064608, 0.0013448 , 0.00085637,
            0.00123967, 0.00091288, 0.00114876, 0.00142757, 0.00092804,
            0.00177395, 0.00090522, 0.00274821, 0.00105686, 0.00160267,
            0.00080001, 0.00109151, 0.00157083, 0.00088782, 0.00086104,
            0.00141127, 0.0023881 , 0.00062846, 0.00312559, 0.00108392,
            0.00091566, 0.00099957, 0.00146223, 0.0011452 , 0.00057009,
            0.00116865, 0.00124363, 0.00183633, 0.00139447, 0.00110215,
            0.00091458, 0.001308  , 0.00194986, 0.00155138, 0.00063937,
            0.00131733, 0.00109251, 0.00075821, 0.00083698, 0.00105334,
            0.00122012, 0.00096575, 0.00104793, 0.00174899, 0.00068953,
            0.00097222, 0.00159565, 0.00092259, 0.001132  , 0.00110937,
            0.00138618, 0.00149132, 0.00173127, 0.00105759, 0.00100114,
            0.00092733, 0.00087521, 0.00121556, 0.00141671, 0.00136967,
            0.00100005, 0.00198617, 0.00172224, 0.00087422, 0.0011649 ,
            0.00168441, 0.00156609, 0.00093163, 0.00118652, 0.00106979])}

```python
print(solver_ackley_custom)
```

    Evolution Strategy search:
     f(X) = 0.0004422434596915714
     X = [-1.26118584e-04 -1.26475657e-04 -1.29772722e-04 -2.90680402e-06]
     Constraints:
     x1: -30 <= -0.00 <= 30
     x2: -30 <= -0.00 <= 30
     x3: -30 <= -0.00 <= 30
     x4: -30 <= -0.00 <= 30

```python
args = (250, 100, 200)
statistics = get_stats(solver_ackley_custom, 30, args)
```

    100%|██████████| 250/250 [00:00<00:00, 268.24it/s]
    100%|██████████| 250/250 [00:01<00:00, 246.21it/s]
    100%|██████████| 250/250 [00:01<00:00, 233.22it/s]
    100%|██████████| 250/250 [00:01<00:00, 232.30it/s]
    100%|██████████| 250/250 [00:01<00:00, 227.49it/s]
    100%|██████████| 250/250 [00:00<00:00, 281.50it/s]
    100%|██████████| 250/250 [00:01<00:00, 231.45it/s]
    100%|██████████| 250/250 [00:01<00:00, 234.93it/s]
    100%|██████████| 250/250 [00:00<00:00, 289.59it/s]
    100%|██████████| 250/250 [00:01<00:00, 238.75it/s]
    100%|██████████| 250/250 [00:01<00:00, 247.36it/s]
    100%|██████████| 250/250 [00:00<00:00, 311.85it/s]
    100%|██████████| 250/250 [00:01<00:00, 240.00it/s]
    100%|██████████| 250/250 [00:00<00:00, 316.78it/s]
    100%|██████████| 250/250 [00:00<00:00, 255.01it/s]
    100%|██████████| 250/250 [00:00<00:00, 276.98it/s]
    100%|██████████| 250/250 [00:00<00:00, 250.73it/s]
    100%|██████████| 250/250 [00:00<00:00, 278.50it/s]
    100%|██████████| 250/250 [00:01<00:00, 221.41it/s]
    100%|██████████| 250/250 [00:00<00:00, 280.72it/s]
    100%|██████████| 250/250 [00:01<00:00, 232.29it/s]
    100%|██████████| 250/250 [00:00<00:00, 296.03it/s]
    100%|██████████| 250/250 [00:01<00:00, 242.21it/s]
    100%|██████████| 250/250 [00:01<00:00, 245.74it/s]
    100%|██████████| 250/250 [00:00<00:00, 284.07it/s]
    100%|██████████| 250/250 [00:01<00:00, 239.76it/s]
    100%|██████████| 250/250 [00:00<00:00, 268.19it/s]
    100%|██████████| 250/250 [00:00<00:00, 258.01it/s]
    100%|██████████| 250/250 [00:01<00:00, 232.09it/s]
    100%|██████████| 250/250 [00:00<00:00, 283.07it/s]

```python
pprint(statistics)
```

    {'Best solution': {'f': 8.964739278427558e-05,
                       'x': array([-7.42417909e-06,  4.26983588e-05,  9.73961424e-06, -5.90230805e-06])},
     'Mean': 14.716142821235808,
     'Standard deviation': 8.684184847870295,
     'Worst solution': {'f': 19.950424956466673,
                        'x': array([ 30., -30., -30., -30.])}}

## (1+1)-EE

```python
Ackley_basic = ESBasic(**ackley_)
```

```python

```

```python
Ackley_basic.optimize(10000,1,1,**additional_arguments )
```

    100%|██████████| 10000/10000 [00:00<00:00, 12505.39it/s]

```python
Ackley_basic.logger
```

    {'individual': array([16.99260666, -1.00779619, -3.01160645, 11.99402034]),
     'aptitude': 17.564532106624274,
     'current_iter': 10000,
     'total_iter': 10000,
     'parent_population_size': 1,
     'offspring_population_size': 1,
     'parent_population_x': array([[16.99260666, -1.00779619, -3.01160645, 11.99402034]]),
     'parent_population_sigma': array([[0.1276578 , 0.54950842, 0.48856936, 0.09927145]]),
     'parent_population_fitness': array([17.56453211]),
     'offspring_population_x': array([[16.95835896, -0.96004824, -3.31381021, 12.11988659]]),
     'offspring_population_sigma': array([[0.1276578 , 0.54950842, 0.48856936, 0.09927145]]),
     'offspring_population_fitness': array([18.53470391])}

```python
print(Ackley_basic)
```

    Evolution Strategy search:
     f(X) = 17.564532106624274
     X = [16.99260666 -1.00779619 -3.01160645 11.99402034]
     Constraints:
     x1: -30 <= 16.99 <= 30
     x2: -30 <= -1.01 <= 30
     x3: -30 <= -3.01 <= 30
     x4: -30 <= 11.99 <= 30

```python
args = (10000, 1, 1)
statistics = get_stats(Ackley_basic, 30, args,**additional_arguments )
```

    100%|██████████| 10000/10000 [00:00<00:00, 11541.06it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13418.02it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12357.89it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13047.87it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 14063.26it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13282.79it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12737.60it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13067.66it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12395.00it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12825.49it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13392.70it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13341.01it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12864.50it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13764.00it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12022.56it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13500.36it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13829.84it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12884.88it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13480.66it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 14059.45it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12991.70it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13543.55it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13492.47it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12831.78it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13698.93it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12930.61it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12941.49it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12997.27it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 12958.73it/s]
    100%|██████████| 10000/10000 [00:00<00:00, 13241.25it/s]

```python
pprint(statistics)
```

    {'Best solution': {'f': 1.8539269092102804,
                       'x': array([ 0.91418066,  0.00244596,  0.00664822, -0.02842378])},
     'Mean': 18.15852196704732,
     'Standard deviation': 3.6212730772745068,
     'Worst solution': {'f': 19.935311441075847,
                        'x': array([ 30.        ,  30.        , -25.00184492, -29.00929935])}}

```python

```