Particula

class pso.clases.class_particula.Particula(n_variables, limites_inf=None, limites_sup=None, verbose=False)[source]

Esta clase representa nueva partícula con una posición inicial definida por una combinación de valores numéricos aleatorios y velocidad de 0. El rango de posibles valores para cada variable (posición) puede estar acotado. Al crear una nueva partícula, solo se dispone de información sobre su posición inicial y velocidad, el resto de atributos están vacíos.

Parameters:
  • n_variables (int) – número de variables que definen la posición de la partícula.
  • limites_inf (list or numpy.ndarray, optional) – límite inferior de cada variable. Si solo se quiere predefinir límites de alguna variable, emplear None. Los None serán remplazados por el valor (-10**3). (default is None)
  • limites_sup (list or numpy.ndarray, optional) – límite superior de cada variable. Si solo se quiere predefinir límites de alguna variable, emplear None. Los None serán remplazados por el valor (+10**3). (default is None)
  • verbose (bool, optional) – mostrar información de la partícula creada. (default is False)
n_variables

número de variables que definen la posición de la partícula.

Type:int
limites_inf

límite inferior de cada variable. Si solo se quiere predefinir límites de alguna variable, emplear None. Los None serán remplazados por el valor (-10**3).

Type:list or numpy.ndarray
limites_sup

límite superior de cada variable. Si solo se quiere predefinir límites de alguna variable, emplear None. Los``None`` serán remplazados por el valor (+10**3).

Type:list or numpy.ndarray
mejor_valor

mejor valor que ha tenido la partícula hasta el momento.

Type:numpy.ndarray
mejor_posicion

posición en la que la partícula ha tenido el mejor valor hasta el momento.

Type:numpy.ndarray
valor

valor actual de la partícula. Resultado de evaluar la función objetivo con la posición actual.

Type:float
velocidad

array con la velocidad actual de la partícula.

Type:numpy.ndarray
posicion

posición actual de la partícula.

Type:numpy.ndarray
Raises:
  • raise Exception – si limites_inf es distinto de None y su longitud no coincide con n_variables.
  • raise Exception – si limites_sup es distinto de None y su longitud no coincide con n_variables.

Examples

Ejemplo creación partícula.

>>> part = Particula(
                n_variables = 3,
                limites_inf = [-1,2,0],
                limites_sup = [4,10,20],
                verbose     = True
                )

Methods

evaluar_particula(funcion_objetivo, optimizacion) Este método evalúa una partícula calculando el valor que toma la función objetivo en la posición en la que se encuentra.
mover_particula(mejor_p_enjambre[, inercia, …]) Este método ejecuta el movimiento de una partícula, lo que implica actualizar su velocidad y posición.
evaluar_particula(funcion_objetivo, optimizacion, verbose=False)[source]

Este método evalúa una partícula calculando el valor que toma la función objetivo en la posición en la que se encuentra. Además, compara si la nueva posición es mejor que las anteriores. Modifica los atributos valor, mejor_valor y mejor_posicion de la partícula.

Parameters:
  • funcion_objetivo (function) – función que se quiere optimizar.
  • optimizacion ({'maximizar', 'minimizar'}) – dependiendo de esto, el mejor valor histórico de la partícula será el mayor o el menor valor que ha tenido hasta el momento.
  • verbose (bool, optional) – mostrar información del proceso por pantalla. (default is False)
Raises:

raise Exception – si el argumento optimizacion es distinto de ‘maximizar’ o ‘minimizar’.

Examples

Ejemplo evaluar partícula con una función objetivo.

>>> part = Particula(
        n_variables = 3,
        limites_inf = [-1,2,0],
        limites_sup = [4,10,20],
        verbose     = True
        )
>>> def funcion_objetivo(x_0, x_1, x_2):
        f= x_0**2 + x_1**2 + x_2**2
        return(f)
>>> part.evaluar_particula(
        funcion_objetivo = funcion_objetivo,
        optimizacion     = "maximizar",
        verbose          = True
        )
mover_particula(mejor_p_enjambre, inercia=0.8, peso_cognitivo=2, peso_social=2, verbose=False)[source]

Este método ejecuta el movimiento de una partícula, lo que implica actualizar su velocidad y posición. No se permite que la partícula salga de la zona de búsqueda acotada por los límites.

Parameters:
  • mejor_p_enjambre (np.narray) – mejor posición de todo el enjambre.
  • inercia (float, optional) – coeficiente de inercia. (default is 0.8)
  • peso_cognitivo (float, optional) – coeficiente cognitivo. (default is 2)
  • peso_social (float, optional) – coeficiente social. (default is 2)
  • verbose (bool, optional) – mostrar información del proceso por pantalla. (default is False)

Examples

Ejemplo mover partícula.

>>> part = Particula(
        n_variables = 3,
        limites_inf = [-1,2,0],
        limites_sup = [4,10,20],
        verbose     = True
        )
>>> def funcion_objetivo(x_0, x_1, x_2):
        f= x_0**2 + x_1**2 + x_2**2
        return(f)
>>> part.evaluar_particula(
        funcion_objetivo = funcion_objetivo,
        optimizacion     = "maximizar",
        verbose          = True
        )
>>> part.mover_particula(
        mejor_p_enjambre = np.array([-1000,-1000,+1000]),
        inercia          = 0.8,
        peso_cognitivo   = 2,
        peso_social      = 2,
        verbose          = True
        )