# Algoritmo de la colonia de hormigas

En ciencias de la computación y en investigación operativa, el algoritmo de la colonia de hormigas, algoritmo hormiga u optimización por colonia de hormigas (Ant Colony Optimization, ACO) es una técnica probabilística para solucionar problemas computacionales que pueden reducirse a buscar los mejores caminos o rutas en grafos.
Este algoritmo es un miembro de la familia de los algoritmos de colonia de hormigas, dentro de los métodos de inteligencia de enjambres. Inicialmente propuesto por Marco Dorigo en 1992 en su tesis de doctorado, el primer algoritmo surgió como método para buscar el camino óptimo en un grafo, basado en el comportamiento de las hormigas cuando estas están buscando un camino entre la colonia y una fuente de alimentos. La idea original se ha diversificado para resolver una amplia clase de problemas numéricos, y como resultado, han surgido gran cantidad de problemas nuevos, basándose en diversos aspectos del comportamiento de las hormigas.

## Descripción general
### Resumen

En nuestro mundo natural, las hormigas (inicialmente) vagan de manera aleatoria, al azar, y una vez encontrada comida regresan a su colonia dejando un rastro de feromonas. Si otras hormigas encuentran dicho rastro, es probable que estas no sigan caminando aleatoriamente, puede que estas sigan el rastro de feromonas, regresando y reforzándolo si estas encuentran comida finalmente.
Sin embargo, al paso del tiempo el rastro de feromonas comienza a evaporarse, reduciéndose así su fuerza de atracción. Cuanto más tiempo le tome a una hormiga viajar por el camino y regresar de vuelta otra vez, más tiempo tienen las feromonas para evaporarse. Un camino corto, en comparación, es marchado más frecuentemente, y por lo tanto la densidad de feromonas se hace más grande en caminos cortos que en los largos. La evaporación de feromonas también tiene la ventaja de evitar convergencias a óptimos locales. Si no hubiese evaporación en absoluto, los caminos elegidos por la primera hormiga tenderían a ser excesivamente atractivos para las siguientes hormigas. En este caso, el espacio de búsqueda de soluciones sería limitado.
Por tanto, cuando una hormiga encuentra un buen camino entre la colonia y la fuente de comida, hay más posibilidades de que otras hormigas sigan este camino y con una retroalimentación positiva se conduce finalmente a todas las hormigas a un solo camino. La idea del algoritmo colonia de hormigas es imitar este comportamiento con "hormigas simuladas" caminando a través de un grafo que representa el problema en cuestión.

### Detallado

La idea original proviene de la observación de la explotación de los recursos alimentarios entre hormigas, en el que las habilidades cognitivas de las hormigas son individualmente limitadas y en conjunto son capaces de buscar el menor camino existente entre la fuente de comida y su nido o colonia.
* La primera hormiga encuentra la fuente de alimentos (F) a través de cualquier camino (a), entonces retorna a la colonia (N), dejando tras sí un rastro de feromonas;
* Las hormigas indiscriminadamente siguen cuatro caminos posibles, pero el fortalecimiento de la pista hace más atractivo la ruta más corta;
* Las hormigas toman la ruta más corta y largas porciones de otras rutas empiezan a perder su rastro de feromonas.
En una serie de experimentos en una colonia de hormigas donde existe la elección de dos rutas de distancias diferentes que llevan hasta la fuente de comida, los biólogos observaron que las hormigas tienden a usar la ruta más corta.
El siguiente modelo explica este comportamiento:
* Una hormiga (llamada “blitz”) vaga de manera aleatoria alrededor de la colonia.
* Si esta encuentra una fuente de comida, retorna a la colonia de manera más o menos directa, dejando tras sí un rastro de feromonas.
* Estas feromonas son atractivas, las hormigas más cercanas se verán atraídas por ellas y seguirán su pista de manera más o menos directa.
* Regresando a la colonia estas hormigas habrán fortalecido dicha ruta.
* Si existen dos rutas para que lleguen a la misma fuente de alimentos entonces, en una misma cantidad de tiempo dado, la ruta más corta será recorrida por más hormigas que la ruta más larga.
* La ruta más corta habrá aumentado en cantidad de feromonas y por tanto empezará a ser más atractiva.
* La ruta más larga irá desapareciendo debido a que las feromonas son volátiles.
* Finalmente, todas las hormigas habrán determinado y escogido el camino más corto.
Las hormigas utilizan el entorno como medio de comunicación. Intercambian información de manera indirecta depositando feromonas en su trayectoria, detallando el estado de su trabajo. La información intercambiada tiene un ambiente local, solamente una hormiga ubicada cerca de donde las feromonas fueron depositadas va a tener una noción de estas. Este sistema es llamado "Estigmergia (Stigmergy)" y ocurre en muchas sociedades de animales (este sistema ha sido estudiado en el caso de la construcción de los pilares en los nidos de termitas). El mecanismo para resolver un problema demasiado complejo para ser abordado por hormigas solamente es un buen ejemplo de un sistema autoorganizado. Este sistema es basado en la retroalimentación positiva (el depósito de feromonas atrae otras hormigas y estas fortalecerán dicha retroalimentación) y la retroalimentación negativa (disipación de la ruta por evaporación). Teóricamente, si la cantidad de feromonas fue la misma en todas las rutas durante todo el tiempo, ninguna ruta fue elegida. Sin embargo, debido a la retroalimentación, una ligera variación en una arista amplificará y entonces se permitirá elegir una ruta. El algoritmo se moverá de un estado inestable en el que ninguna arista es más fuerte que otra, a un estado estable donde una ruta está compuesta por las aristas más fuertes.
La filosofía básica del algoritmo implica el movimiento de una colonia de hormigas a través de los diferentes estados del problema influenciado por dos políticas de decisión a nivel local, rutas y atracción. De esta manera, cada hormiga incrementalmente construye una solución del problema. Cuando una hormiga completa una solución, o durante la fase de construcción, las hormigas evalúan la solución y modifican el valor de la ruta sobre las componentes utilizadas en la solución. Esta información de feromonas dirigirá la búsqueda de futuras hormigas. Además el algoritmo incluye dos mecanismos más, evaporación del rastro y acciones daemon. La evaporación del rastro reduce todos los valores de los rastros evitando la posibilidad de caer en óptimos locales. Las acciones daemon son usadas para desviar el proceso de búsqueda de una perspectiva local.

## Extensiones Comunes

Estas son algunas de las variaciones más populares de los algoritmos de colonia de hormigas (ACO Algorithms).

### Sistema de Hormigas

El sistema de hormigas es el primer algoritmo OCH propuesto. Se corresponde con el funcionamiento descrito en la anterior sección

### Sistema Elitista de Hormigas

La mejor solución global deposita feromonas en cada iteración junto con todas las otras hormigas.

### Max-Min Sistema de Hormigas (MMAS)

Agregada la cantidad máxima y mínima de feromonas [t$_{max}$,t$_{min}$] Solamente la mejor iteración deposita feromonas. Todas las aristas son inicializadas con t$_{max}$ y re-inicializadas con t$_{max}$ cuando se acerca a un estancamiento.

### Sistema de Colonia de Hormigas

Se ha presentado anteriormente.

### Sistema de Hormigas Basado en Ranking (ASrank)

Todas las soluciones se clasifican de acuerdo su longitud. La cantidad de feromonas depositadas es ponderada para cada solución, de tal manera que las soluciones con los caminos más cortos depositan más feromonas que las soluciones que con los caminos más largos.

### Colonia de Hormigas Ortogonal Continua (COAC)

El mecanismo de depósito de feromonas de COAC es permitir a las hormigas la búsqueda de soluciones en conjunto y efectiva. Usando un método de diseño ortogonal, las hormigas en un dominio factible pueden explorar las regiones elegidas de una manera rápida y eficiente, con mayor capacidad de búsqueda global y precisión.

### Optimización de Colonia de Hormigas con Lógica Difusa

Este método introduce inteligencia difusa dentro de las hormigas para acelerar las habilidades de búsqueda.

## Convergencia

Para algunas variaciones del algoritmo, es posible demostrar que es convergente. La primera evidencia de la convergencia del algoritmo colonia de hormigas fue hecha en el año 2000, el algoritmo de sistema de hormigas basado en grafos, y por tanto los algoritmos para ACS y MMAS. Como muchas metaheurísticas, es bastante difícil estimar la velocidad teórica de convergencia. En el año 2004, Zlochin y sus colegas demostraron que los algoritmos de tipo COA podrían asimilar los métodos de descenso de gradiente estocástico, sobre la entropía cruzada y estimaciones de algoritmos de distribución.

## Pseudocódigo y Fórmulas
### Selección de Aristas

Una hormiga es un simple agente computacional en el algoritmo de optimización colonia de hormigas. Se construye iterativamente una solución para el problema en cuestión. Las soluciones intermedias se denominan estados solución. En cada iteración del algoritmo, cada hormiga se mueve de un estado $x$ a un estado $y$, correspondiendo a una solución intermedia más completa. Por tanto, cada hormiga $k$ computa un conjunto $A_{k}(x)$ de expansiones factibles de su estado actual en cada iteración y se mueve a una de estas de manera probabilística. Para una hormiga $k$, la probabilidad $p_{xy}^{k}$ de moverse de un estado $x$ a un estado $y$ depende de la combinación de dos valores , de el atractivo $\eta _{xy}$ del movimiento, computado por alguna heurística que indica a priori la conveniencia de dicho movimiento y el nivel de rastro $\tau _{xy}$ del movimiento, indicando que tan competente ha sido en el pasado este particular movimiento.
El nivel de rastro representa a posteriori una indicación de la conveniencia de ese movimiento. Los rastros son actualizados por lo general cuando todas las hormigas han completado su solución, aumentando o disminuyendo los niveles de los rastros de los movimientos correspondientes que fueron partes de "buenas" o "malas" soluciones respectivamente.
En general, la $k$th hormiga se mueve del estado $x$ al estado $y$ con probabilidad
$p_{xy}^{k}={\frac {(\tau _{xy}^{\alpha })(\eta _{xy}^{\beta })}{\sum (\tau _{xy}^{\alpha })(\eta _{xy}^{\beta })}}$
donde
$\tau _{xy}$ es la cantidad de feromonas depositadas en la transición del estado $x$ a $y$, 0 ≤ $\alpha$ es un parámetro para controlar la influencia de $\tau _{xy}$, $\eta _{xy}$ es la conveniencia del estado de transición $xy$ (un conocimiento a priori , típicamente $1/d_{xy}$, donde $d$ es la distancia) y $\beta$ ≥ 1 es un parámetro para controlar la influencia de $\eta _{xy}$.

### Actualización de Feromonas

Cuando todas las hormigas han completado un solución, los rastros son actualizados por $\tau _{xy}\leftarrow (1-\rho )\tau _{xy}+\sum _{k}\Delta \tau _{xy}^{k}$
donde
$\tau _{xy}$ es la cantidad de feromonas depositadas para un estado de transición$xy$, $\rho$ es el coeficiente de evaporación de feromonas y $\Delta \tau _{xy}^{k}$ es la cantidad de feromonas depositadas por la $k$th hormiga, típicamente dado para el Problema del Viajante (con movimientos correspondientes a los arcos del grafo) por $\Delta \tau _{xy}^{k}={\begin{cases}Q/L_{k}&{\mbox{if ant }}k{\mbox{ uses curve }}xy{\mbox{ in its tour}}\\0&{\mbox{otherwise}}\end{cases}}$
donde $L_{k}$ es el costo de la ruta de la $k$th hormiga (en la mayoría de los casos es la longitud) y $Q$ es una constante.

## Aplicaciones

Los algoritmos de optimización de colonias de hormigas son aplicados en muchos algoritmos de optimización combinatorios. Muchos métodos derivados han sido adaptados a problemas dinámicos en variables reales, problemas estocásticos, programación paralela y multi-objetivo. Incluso han sido usados para producir soluciones bastante cercanas a las soluciones óptimas del problema del viajante. Ellos tienen una ventaja sobre los enfoques: recocido simulado y los algoritmos genéticos en problemas similares cuando el grafo puede cambiar su estructura de manera dinámica, el algoritmo de colonia de hormigas puede seguir corriendo continuamente y adaptar los cambios en tiempo real. Esto es de interés en los campos de enrutamiento de redes y en los sistemas de transportes urbanos.
El primer algoritmo de colonia de hormigas, llamado Ant System , tenía como objetivo resolver el problema del viajante, que consiste en encontrar el camino hamiltoniano más corto en un grafo completo. El algoritmo general es relativamente simple y está basado en un conjunto de hormigas, cada una haciendo una posible ruta entre las ciudades. En cada estado las hormigas eligen moverse de una ciudad a otra teniendo en cuenta las siguientes reglas:
* Debe visitar cada ciudad exactamente una vez, excepto la inicial en la que estará dos veces (salida y llegada final);
* Una ciudad distante tiene menor posibilidad de ser elegida (Visibilidad);
* Cuanto más intenso es el rastro de feromonas de una arista entre dos ciudades, mayor es la probabilidad de que esa arista sea elegida;
* Después de haber completado su recorrido, la hormiga deposita más feromonas en todas las aristas, si la distancia es pequeña;
* Después de cada iteración, algunas feromonas son evaporadas.
Los usos del algoritmo se utilizan para máquinas de aprendizaje y para problemas con una gran cantidad de datos. Por ejemplo, se ha estudiado crear un modelo del mantenimiento del cementerio donde las hormigas arraciman los cadáveres de sus semejantes.
Esto se ha adaptado a la tarea de supervisión de las máquinas de aprendizaje, encargadas de agrupar los grupos de objetos que son similares. De hecho se han demostrado que tales formas modificadas de algoritmos dan un funcionamiento y una exactitud mejores que los métodos clásicos tales como el bien conocido k-means.
Un ejemplo de aplicación de este tipo de algoritmos es la optimización de estructuras de hormigón armado, en especial, pilas de puentes

## Algoritmos Stigmergy

En la práctica una gran cantidad de algoritmos se dicen llamar "algoritmos de colonia de hormigas", sin compartir ni siquiera el framework de optimización de colonias de hormigas canónicas (COA). En la práctica, el hecho de intercambiar información entre hormigas mediante el entorno (un principio llamado "Stigmergy") se considera suficiente para que un algoritmo pertenezca a la clase de algoritmos de colonia de hormigas. Este principio ha llevado a algunos a autores a crear el término "valor" para organizar los métodos y el comportamiento basado en la búsqueda de alimentos, clasificación de larvas, división del trabajo y en el transporte cooperativo.

## Métodos Relacionados

* Algoritmos genéticos (GA) mantienen un grupo de soluciones en vez de tener siempre una. El proceso de encontrar soluciones superiores imita al proceso de evolución, las soluciones existentes son combinadas o mutas con el objetivo de tener un nuevo grupo de soluciones, las soluciones que no aportan nada al proceso evolutivo se descartan, estas son soluciones de calidad inferior.
* Recocido Simulado (SA) es una técnica relacionada con la optimización global que atraviesa el espacio de búsqueda mediante la generación de soluciones vecinas de la solución actual. Un vecino superior siempre es tomado y uno inferior es tomado de manera probabilística basado en las diferencias de calidad y un parámetro de temperatura. El parámetro de temperatura es modificado en medida del progreso del algoritmo para alterar la naturaleza de la búsqueda.
* Búsqueda tabú (TS) es similar a recocido simulado, en ambos se atraviesa el espacio de solución probando con mutaciones de una solución individual. Mientras recocido simulado se queda solamente con una mutación, búsqueda tabú genera muchas mutaciones y se mueve a la solución de menor ganancia de las generadas. Para prevenir ciclos se crea y se mantiene una lista tabú con soluciones parciales o completas. Está prohibido pasar a una solución que contiene elementos en la lista tabú, la cual se actualiza en medida de que el algoritmo recorre el espacio de soluciones.
* Sistema Inmune Artificial (AIS) algoritmos basado en el modelo de los sistemas inmunológicos de los vertebrados.
* Enjambre de Partículas (PSO), método de Inteligencia de Enjambres.

## Historia

Cronología de los algoritmos de optimización de colonias de hormigas.
* 1959, Pierre-Paul Grassé inventó la teoría de Estigmergia para explicar el comportamiento de nidificación en las termitas;
* 1983, Deneubourg y sus colegas estudiaron el comportamiento colectivo de las hormigas,;
* 1989, el trabajo de Goss, Aron, Deneubourg y Pasteels sobre el comportamiento colectivo de las hormigas argentinas, que dará la idea de los algoritmos de optimización de colonias de hormigas
* 1991, M. Dorigo propone Ant System en su tesis doctoral (que se publicó en 1992). Un informe técnico extraído de la tesis y coescrito por V. Maniezzo y Colorni A. fue publicado cinco años después;
* 1996, Publicación del artículo sobre Ant System;
* 1996, Hoos and Stützle intventaron MAX-MIN Ant System;
* 1997, Dorigo y Gambardella publicaron Ant Colony System;
* 1997, Schoonderwoerd y sus colegas desarrollaron la primera aplicación desarrollaron la primera aplicación para redes de telecomunicaciones;
* 1998, Dorigo lanza la primera conferencia dedicada a los algoritmos de Colonias de Hormigas;
* 1998, Stützle propone implementaciones en paralelo;
* 1999, Bonabeau, Dorigo and Theraulaz publican el libro que trata principalmente de las hormigas artificiales
* 2000, número especial de la revista Future Generation Computer Systems sobre los algoritmos de colonia de hormigas
* 2000, Gutjahr proporciona la primera evidencia de convergencia de un algoritmo de colonias de hormigas
* 2001, el primer uso de algoritmos de optimización de colonias de hormigas por las empresas (Eurobios y AntOptima);
* 2001, Iredi y sus colegas publicaron el primer algoritmo multi-objetivo
* 2002, Bianchi and sus colegas sugieren el primer algoritmo para problemas estocásticos;