Jestem studentem pracującym nad symulatorem kolonii mrówek dla projektu kursu. Algorytm do tego jest (oczywiście) algorytmem kolonii mrówek. Wiem, że istnieją różne formy algorytmu, ale wszystkie były dla nas zbyt matematyczne, więc przyjęliśmy podejście, w którym:
- Mrówka rodzi się w kolonii i musi zbierać żywność ze źródła, aby utrzymać kolonię.
- Wszystkie mrówki są podobne.
- Obszar, w którym porusza się mrówka, to siatka o wymiarach 1000 x 1000, więc każdy punkt siatki służy jako prawidłowy punkt do zajęcia przez mrówkę. Teraz wszystkie algorytmy, które napotkałem, dotyczą oddzielnego traktowania wierzchołków i krawędzi, ale ponieważ ograniczamy ruch mrówek tylko do czterech kierunków (w górę, w dół, w lewo, w prawo), myślę, że nie ma znaczenia, gdzie umieszczamy feromon.
- Punkty siatki wspomniane powyżej przechowują feromon.
- Mrówka upuszcza feromon tylko wtedy, gdy przenosi jedzenie.
- W przypadku mrówki w pozycji (i, j) decyduje, gdzie się poruszać w następnym kroku, biorąc pod uwagę ilości feromonów na czterech sąsiednich węzłach w prostej formule probabilistycznej, tj. Prawdopodobieństwo podróży do węzła jest określone przez (ilość feromonu w danym sąsiednim węźle) / (suma ilości feromonu w 4 sąsiadujących węzłach).
- Mrówka nie może wrócić do pozycji, z której właśnie przyszła. Może to zrobić tylko wtedy, gdy znajduje się w miejscu z żywnością lub w swojej kolonii.
Teraz obawiam się (i co tak naprawdę dzieje się w naszym programie), że kiedy Mrówka PIERWSZA osiągnie pozycję z jedzeniem i ją odbierze, to po drodze naszego algorytmu może się poruszać gdziekolwiek! Wynika to z tego, że pozostawia ślad feromonów, gdy tylko dostanie jedzenie, a nie wcześniej, a ponieważ jest to pierwsza mrówka, nie ma już śladu.
Jeśli mrówka może się gdziekolwiek poruszać, mrówki, które docierają do źródła pokarmu po nim, również zwykle podążają za nim. NAWET JEŚLI nie porusza się z powrotem w kierunku kolonii. To przeczy celowi całego algorytmu.
Więc moje pytania są
- Czy powyższy problem jest ważny? Jeśli nie, to dlaczego? Jeśli tak, to jak sobie z tym poradzić?
- Czy musimy wprowadzić pewne zmiany w naszym podstawowym zrozumieniu algorytmu, aby faktycznie działał?
- Jakie inne subtelne, ale ważne rzeczy mogą pominąć w tym przypadku nowicjusze tacy jak ja?