Soy un estudiante que trabaja en un simulador de colonias de hormigas para un proyecto de curso. El algoritmo para ello es (obviamente) un algoritmo de colonias de hormigas. Sé que hay varias formas del algoritmo, pero todas eran demasiado detalladas matemáticamente para nosotros, por lo que adoptamos un enfoque en el que tenemos:
- Una hormiga nace en una colonia y debe recolectar alimentos de una fuente para mantener la colonia.
- Todas las hormigas son similares.
- El área en la que se mueve la hormiga es una cuadrícula de 1000x1000, por lo que cada punto de la cuadrícula sirve como un punto válido para que una hormiga lo ocupe. Ahora, todos los algoritmos que he encontrado implican tratar los vértices y los bordes por separado, pero como estamos restringiendo el movimiento de las hormigas a solo cuatro direcciones (arriba, abajo, izquierda, derecha), supongo que no importa dónde coloquemos la feromona.
- Los puntos de la cuadrícula mencionados anteriormente almacenan la feromona.
- Una hormiga deja caer feromona solo si transporta alimentos.
- Para una hormiga en una posición (i, j), decide dónde moverse en el siguiente paso teniendo en cuenta las cantidades de feromona en sus cuatro nodos adyacentes en una fórmula probabilística simple, es decir, la probabilidad de viajar a un nodo viene dada por (cantidad de feromona en un nodo adyacente particular) / (suma de cantidades de feromona en 4 nodos adyacentes).
- Una hormiga no puede regresar a la posición de la que acaba de llegar. Solo puede hacerlo si está en un sitio que tiene comida o está en su colonia.
Ahora mi preocupación es (y lo que realmente está sucediendo en nuestro programa) que cuando una hormiga PRIMERO alcanza una posición que tiene comida y la recoge, entonces, por la forma en que funciona nuestro algoritmo, ¡puede moverse a cualquier parte! Esto se debe a que solo dejará un rastro de feromona, una vez que tenga la comida y no antes, y como es la primera hormiga, no hay rastro existente.
Si la hormiga puede moverse a cualquier parte, las hormigas que alcanzan la fuente de alimento después de que también tienden a seguirla. INCLUSO SI no se está moviendo hacia la colonia. Esto anula el propósito de todo el algoritmo.
Entonces mis preguntas son
- ¿Es válida la preocupación anterior? Si no, ¿por qué? Si es así, ¿cómo lidiar con eso?
- ¿Necesitamos hacer algunos cambios en nuestra comprensión básica del algoritmo para que realmente funcione?
- ¿Cuáles son algunas otras cosas sutiles pero importantes que los novatos como yo pueden perder en este caso?
fuente
Respuestas:
Así no es como funciona ACO. ACO solo deja caer feromonas después de que las hormigas se hayan movido por todos los puntos de la cuadrícula. Luego evalúa algo (quizás el tiempo total de viaje) y luego suelta feromonas para las buenas hormigas, y repite.
Por lo general, no se mueven al mismo vértice dos veces, aunque puede personalizarlo para la especificidad de la implementación.
Las feromonas no se caen en cada movimiento, caen después de moverse a todas partes y se evalúa algo para determinar qué hormigas son mejores. Las hormigas que son mejores que las phereomonas caen (quizás las mejores hormigas con un 25% de rendimiento).
fuente
Las implementaciones que he visto de otros, y las que he escrito para mí, siempre han hecho que las hormigas liberen las feromonas a lo largo del camino recorrido para llegar a la comida, una vez que han llegado a la comida. Es decir, las hormigas marchan de su colonia a la comida siguiendo una caminata aleatoria; los caminos seguidos por las hormigas desde la colonia hasta la comida se marcan usando feromonas solo después de que las hormigas lograron alcanzar la comida. El viaje de regreso no se simula explícitamente. En general, las hormigas múltiples siguen su curso antes de que se depositen feromonas para la iteración actual. Las feromonas se despliegan para los caminos exitosos, y comienza una nueva ronda.
Por lo general, las probabilidades de la hormiga de entrar en un nodo dado se ponderan por la cantidad de feromona multiplicada por alguna medida de "bondad". Por ejemplo, la medida de bondad podría ser algo como la inversa de la distancia entre la hormiga y la comida; esto mantendrá a las hormigas tratando de moverse hacia la comida, independientemente de los depósitos previos de feromonas. La bondad podría ponderarse aún más para tener en cuenta otros factores, por ejemplo, algunos nodos podrían ser más fáciles de atravesar que otros. Y como señala Enderland, generalmente hay alguna forma de "selección" de ruta una vez que todas las hormigas han realizado sus cursos con éxito, donde solo una parte de las "mejores" rutas se eligen para el depósito de feromonas. Sin embargo, aún debe obtener rutas razonables incluso sin selección,
fuente