Algoritmo de colonia de hormigas ACO Planificación de ruta global

Autor: Chihu
Enlace: https://www.zhihu.com/question/20207322/answer/27387066
Fuente: Zhihu
Los derechos de autor pertenecen al autor. Para reimpresión comercial, comuníquese con el autor para obtener autorización, para reimpresión no comercial, indique la fuente.

El algoritmo de colonia de hormigas es un algoritmo de aproximación. No se utiliza para resolver el problema del algoritmo preciso y efectivo existente, sino para resolver el problema de que hasta ahora no se ha encontrado ningún algoritmo preciso y efectivo, como el problema del viajante de comercio (TSP ) .

También se puede decir que el problema del vendedor ambulante busca el "camino más corto", pero es para buscar el ciclo hamiltoniano mínimo de un gráfico completo. Este problema no ha encontrado un algoritmo de tiempo polinomial hasta el momento, y pertenece al problema NPC. Es decir, cuando la escala del problema es ligeramente mayor, la cantidad de cómputo del algoritmo exacto existente aumentará dramáticamente.
 

¿Cuáles son las ventajas del algoritmo de colonia de hormigas?

Para entender este problema, es necesario averiguar para qué se usa el algoritmo.

Los algoritmos se utilizan para resolver varios problemas, como el problema del camino más corto en el problema principal.

En el campo de las matemáticas existen clasificaciones según la complejidad del problema en sí.

En términos simples, los problemas se dividen en problemas P, problemas NP, problemas NPC y problemas NP-difíciles.

P es la letra inicial de la palabra polinomio, es decir, Polinomio, [aquí se refiere al tiempo polinomial]

El problema P significa que siempre se puede encontrar el algoritmo clásico correspondiente para obtener la solución óptima en tiempo polinomial.

El problema NP significa que no está claro si se puede encontrar el algoritmo correspondiente para obtener la solución óptima en tiempo polinomial.

El problema NPC puede entenderse como el problema más difícil (de mayor complejidad) dentro del problema NP, es decir, es difícil encontrar un algoritmo correspondiente que pueda obtener la solución óptima en tiempo polinomial.

El problema NP-difícil puede entenderse simplemente como que ningún algoritmo correspondiente puede encontrar la solución óptima en tiempo polinomial.

Todos los estudios sobre problemas NP se centran en una pregunta, es decir, ¿existe P=NP? El llamado "problema NP" es en realidad solo una oración: probar o derrocar P = NP. El progreso actual no es ideal, así que no diré mucho. La relación entre los cuatro, si está interesado en mirar la imagen, si no está interesado en saltar, no afectará.

Es sencillo averiguar la clasificación de los problemas que afectan la dirección de investigación de los algoritmos informáticos .

En pocas palabras, los algoritmos clásicos tradicionales pueden resolver problemas de tipo P, pero los problemas de NP, especialmente los problemas de NPC, son inútiles, por lo que los científicos comenzaron a encontrar una manera. Dado que no se puede obtener una solución óptima en tiempo polinómico, entonces obtengamos un mejor solución, use el conocimiento de la experiencia previa como operador heurístico, por lo que nació el algoritmo heurístico , pero el algoritmo heurístico solo puede abordar problemas específicos (por ejemplo, el algoritmo principal y el algoritmo kruskal son ambos algoritmos heurísticos clásicos, en El efecto de la el campo de árbol de expansión mínimo es mejor), el algoritmo heurístico no es adecuado para el campo cruzado, pero hay tantos problemas de NP, qué hacer, por lo que comenzaron a introducirse varias teorías biónicas en el campo de los algoritmos informáticos, y el so- Los algoritmos llamados colonia de hormigas, grupo de partículas, genéticos y de redes neuronales se denominan colectivamente algoritmos de optimización inteligente ( algoritmos metaheurísticos ) para encontrar mejores soluciones.

Introducción al algoritmo:

 El algoritmo de colonia de hormigas (Ant Colony Algorithm, ACA) se propuso por primera vez en 1992, 'este algoritmo simula el comportamiento de búsqueda de alimento de las hormigas en la naturaleza.

Cuando una hormiga busca una fuente de alimento, liberará una feromona en su camino y podrá sentir la feromona liberada por otras hormigas. El tamaño de la concentración de feromonas representa la distancia del camino, y cuanto mayor sea la concentración de feromonas, más corta será la distancia del camino correspondiente.

Por lo general, las hormigas elegirán preferentemente el camino con mayor concentración de feromonas con una mayor probabilidad y liberarán una cierta cantidad de feromonas para mejorar la concentración de feromonas en este camino, formando así una retroalimentación positiva. Eventualmente, las hormigas pueden encontrar el mejor camino desde el nido hasta la fuente de alimento, es decir, la distancia más corta.

Idea de algoritmo:
use el camino de las hormigas para representar la solución factible del problema a optimizar, y todos los caminos de toda la colonia de hormigas constituyen el espacio de solución del problema a optimizar.
Las hormigas con caminos más cortos liberaron más feromonas, con el paso del tiempo, la concentración de feromonas acumuladas en caminos más cortos aumentó gradualmente, y también aumentó el número de hormigas que eligieron este camino.
Al final, todas las hormigas se concentrarán en el mejor camino bajo la acción de la retroalimentación positiva, que corresponde a la solución óptima del problema a optimizar.
Pero eso no significa que si la concentración de feromonas es alta, debas tomar esa ruta. También existe la posibilidad de tomar una ruta con baja concentración de información.

Algoritmo específico: 

 

Función de parámetro:

Número de hormigas: cuanto mayor sea la población, más precisa será la solución óptima, pero habrá una gran cantidad de hormigas que pasan por el mismo camino repetidamente y el tiempo de ejecución aumentará.
Factor de importancia de la feromona alfa: si el valor alfa es demasiado grande, la posibilidad de que las hormigas elijan el camino que han recorrido antes es mayor y la aleatoriedad del camino de búsqueda de la colonia de hormigas se debilita. Si el valor alfa es demasiado pequeño, el rango de búsqueda de la colonia de hormigas se reducirá y es fácil caer en una solución óptima local.
factor de función heurística beta: cuando el valor beta aumenta, es más probable que la colonia de hormigas elija una ruta local más corta, lo que puede acelerar la velocidad de ejecución del algoritmo, pero puede caer en una solución óptima local.
factor de volatilización de feromonas ruo: cuando ruo es pequeño, hay mucha información residual en cada camino, y la búsqueda se repetirá y el tiempo de cálculo aumentará; cuando ruo es grande, se abandonarán muchos caminos efectivos, y el óptimo se puede perder valor.
Fuerza de la información Q

El código clave es el siguiente:

#生成蚁群
def get_ants(self, num_city):
    for i in range(self.m):
        start = np.random.randint(num_city - 1)
        self.Table[i][0] = start
        unvisit = list([x for x in range(num_city) if x != start])
        current = start
        j = 1
        while len(unvisit) != 0:
            P = []
            # 通过信息素计算城市之间的转移概率
            for v in unvisit:
                P.append(self.Tau[current][v] ** self.alpha * self.Eta[current][v] ** self.beta)
            P_sum = sum(P)
            P = [x / P_sum for x in P]
            # 轮盘赌选择一个一个城市
            index = self.rand_choose(P)
            current = unvisit[index]
            self.Table[i][j] = current
            unvisit.remove(current)
            j += 1


# 更新信息素
def update_Tau(self):
    delta_tau = np.zeros([self.num_city, self.num_city])
    paths = self.compute_paths(self.Table)
    for i in range(self.m):
        for j in range(self.num_city - 1):
            a = self.Table[i][j]
            b = self.Table[i][j + 1]
            delta_tau[a][b] = delta_tau[a][b] + self.Q / paths[i]
        a = self.Table[i][0]
        b = self.Table[i][-1]
        delta_tau[a][b] = delta_tau[a][b] + self.Q / paths[i]
    self.Tau = (1 - self.rho) * self.Tau + delta_tau


def aco(self):
        best_lenth = math.inf  # math.inf返回浮点正无穷大
        best_path = None
        for cnt in range(self.iter_max):
            # 生成新的蚁群
            self.get_ants(self.num_city)  # out>>self.Table
            self.paths = self.compute_paths(self.Table)
            # 取该蚁群的最优解
            tmp_lenth = min(self.paths)
            tmp_path = self.Table[self.paths.index(tmp_lenth)]
            # 可视化初始的路径
            if cnt == 0:
                init_show = self.location[tmp_path]
                init_show = np.vstack([init_show, init_show[0]])
            # 更新最优解
            if tmp_lenth < best_lenth:
                best_lenth = tmp_lenth
                best_path = tmp_path
            # 更新信息素
            self.update_Tau()

            # 保存结果
            self.iter_x.append(cnt)
            self.iter_y.append(best_lenth)
            print(cnt, best_lenth)
        return best_lenth, best_path

Explicación del código:

La operación principal del código es generar una colonia de hormigas, dejar que cada hormiga encuentre un camino, calcular la probabilidad P y registrar la tabla de caminos de cada hormiga a modo de ruleta. Calcula el camino de cada hormiga y toma el camino más corto. Luego actualice la feromona.La operación principal aquí es calcular ΔTau, y la selección de ΔTau es solo para el camino, por lo que debe calcularse para cada hormiga que pasa, y finalmente se calcula el nuevo Tau de acuerdo con la fórmula de la principio de volatilización.

Supongo que te gusta

Origin blog.csdn.net/weixin_62705892/article/details/128165589
Recomendado
Clasificación