Muy bien, así que la idea detrás de la optimización de enjambre de partículas es la siguiente:
Tenemos un problema, pero es difícil de resolver. Así que vamos a tomar numerosas conjeturas sobre una solución y llamarlas "partículas". Llamemos a nuestras partículas vi donde i es una variable de índice para las partículas. Por suerte, tenemos una función que nos dice lo buenas que son nuestras conjeturas actuales (en este caso, la función de distancia). Así que vamos a tratar de mejorar nuestras conjeturas.
Sabemos cuál es actualmente la mejor suposición, por lo que deberíamos querer que nuestras partículas exploren esa zona, por lo que deberíamos mover nuestras partículas más cerca de la mejor solución conocida. Llamemos a esta variable g .
Sin embargo, también queremos explorar otras áreas, por lo que también moveremos las partículas basándonos en su propia "memoria", que es su mejor posición conocida. Llamemos a esta variable pi donde i se refiere al i La posición más conocida de las partículas.
También solemos querer tener un componente aleatorio que permita a nuestras partículas explorar zonas completamente nuevas, esto se suele llamar velocidad. Llamemos a esta variable v .
Además, aleatorizaremos el grado de consideración de cada uno de estos componentes, para que las partículas individuales se comporten de forma independiente (y así exploren mejor el espacio de soluciones). Llamemos a estos vectores r1,r2 (tenga en cuenta que se encuentran en el intervalo (0,1)d donde d es la dimensión del espacio en el que trabajamos)$.
Así que cuando mejoremos nuestras conjeturas (ejecutando una iteración de PSO), vamos a sustituir nuestras partículas por
vi=r1g+r2pi+v
Vamos a intentarlo con tu ejemplo. Vamos a dar nombres a nuestras partículas, v1=(4,3) , v2=(−5,6) , v3=(−3,7)
De sus partículas inicializadas, (4,3) es el más cercano a (0,0) y por lo tanto es nuestra mejor solución global, por lo que g=(4,3) .
Cada partícula sólo ha visto un lugar por lo que actualmente pi=vi
Ahora en la práctica usted querrá tomar variables aleatorias para obtener su ponderación, para mis propósitos tendré todas las variables aleatorias =.5 (en todos los componentes, y v=0 .
Por notación diré vi,new como la partícula actualizada y vi,old para la partícula no actualizada.
tenemos
v1,new=[.5,0.5]t(4,3)+[0.5,0.5]t(4,3)+0=(4,3) v2,new=[.5,0.5]t(4,3)+[0.5,0.5]t(−5,6)+0=(−1/2,9/2) v3,new=[.5,0.5]t(4,3)+[0.5,0.5]t(−3,7)+0=(−1/2,5)
Ahora comprobamos, ¿mejoró alguna de nuestras partículas? Bueno, debido a cómo elegí las variables aleatorias, v1 no cambió.
Sin embargo las otras dos partículas se acercaron a (0,0) (puedes comprobarlo con la función distancia). Por lo tanto actualizamos p2=(−1/2,9/2) y p3=(−1/2,5)
Obsérvese también que v_{2,new} está más cerca de (0,0) que nuestra mejor suposición anterior (4,3) por lo que actualizamos g a g=v2,new .
Ahora podemos continuar con este procedimiento y eso es la optimización por enjambre de partículas. Espero que esto ayude.