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
. LosNone
serán remplazados por el valor (-10**3). (default isNone
) - 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
. LosNone
serán remplazados por el valor (+10**3). (default isNone
) - 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
. LosNone
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 )