Я студент, работающий над симулятором колонии муравьев для курсового проекта. Алгоритм для этого (очевидно) алгоритм колонии муравьев. Я знаю, что существуют различные формы алгоритма, но все они были слишком математически детализированы для нас, поэтому мы выбрали подход, в котором мы имеем:
- Муравей рождается в колонии и должен собирать пищу из источника, чтобы поддерживать колонию.
- Все муравьи похожи.
- Область, в которой перемещается муравей, представляет собой сетку 1000x1000, поэтому каждая точка сетки служит допустимой точкой для размещения муравья. Теперь все алгоритмы, с которыми я сталкивался, включают в себя обработку вершин и ребер отдельно, но, поскольку мы ограничиваем движение муравьев только четырьмя направлениями (вверх, вниз, влево, вправо), я думаю, не имеет значения, куда мы помещаем феромон.
- Точки сетки, упомянутые выше, хранят феромон.
- Муравей сбрасывает феромон, только если он несет пищу.
- Для муравья в позиции (i, j) он решает, куда двигаться на следующем шаге, принимая во внимание количество феромонов на его четырех смежных узлах в простой вероятностной формуле, то есть вероятность поездки в узел определяется как (количество феромона в конкретном соседнем узле) / (сумма количеств феромона в 4 смежных узлах).
- Муравей не может вернуться в положение, из которого он только что пришел. Он может сделать это только в том случае, если он находится в месте, где есть еда, или в своей колонии.
Теперь меня беспокоит (и то, что на самом деле происходит в нашей программе), что когда муравей FIRST достигает позиции, в которой есть пища, и поднимает ее, то, как работает наш алгоритм, он может двигаться куда угодно! Это потому, что он оставит только след феромона, как только у него будет пища, а не раньше, и, поскольку это первый муравей, следа не будет.
Если муравей может куда-либо двигаться, муравьи, которые достигают источника пищи после него, также в основном будут следовать за ним… ДАЖЕ ЕСЛИ он не движется обратно к колонии. Это противоречит цели всего алгоритма.
Так что мои вопросы
- Действительна ли вышеуказанная проблема? Если нет, то почему? Если да, то как с этим бороться?
- Нужно ли нам вносить некоторые изменения в наше базовое понимание алгоритма, чтобы он действительно работал?
- Какие еще тонкие, но важные вещи могут пропустить такие новички, как я?