私はコースプロジェクトのアリのコロニーシミュレータに取り組んでいる学生です。そのアルゴリズムは(明らかに)アリのコロニーのアルゴリズムです。アルゴリズムにはさまざまな形式があることは知っていますが、それらはすべて数学的に詳細すぎたため、次のようなアプローチを採用しました。
今私の懸念は(そして実際に私たちのプログラムで何が起こっているのか)、アリが最初に食べ物を持っている位置に到達してそれを拾ったとき、アルゴリズムが機能する方法によって、それはどこにでも移動できるということです!これは、フェロモントレイルのみを残すためです。一度それが食物を手に入れれば、以前にではなく、最初のアリなので、既存のトレイルはありません。
アリがどこにでも移動できる場合、食物源に到達したアリは、ほとんどの場合、それに追従する傾向があります。たとえコロニーに向かって移動していなくても。これは、アルゴリズム全体の目的を無効にします。
だから私の質問は
これはACOの動作方法ではありません。 ACOは、アリがグリッド内のすべてのポイントを移動した後にのみフェロモンをドロップします。次に、何か(おそらく総移動時間)を評価し、良いアリのフェロモンをドロップして、繰り返します。
実装固有にカスタマイズすることはできますが、通常は同じ頂点に2回移動することはありません。
フェロモンは移動するたびにドロップされるのではなく、どこに移動した後もドロップされます何かが評価されますどのアリがより良いかを決定します。より優れているアリはフェロモンを落とします(おそらく最高の25%のパフォーマンスのアリ)。
私が他の人から見た実装、および私が自分用に作成した実装は、餌に到達した後、アリが常に食べ物にたどり着くまでの経路に沿ってフェロモンを解放させていました。つまり、アリはランダムに散歩した後、コロニーから餌まで行進します。アリがたどる経路コロニーから食物までは、フェロモンを使用してマークされます後のみアリは食物に到達することに成功しました。復路は明示的にシミュレートされていません。一般に、現在の反復でフェロモンが配置される前に、複数のアリがコースを実行します。次に、フェロモンが成功したパスに展開され、新しいラウンドが始まります。
通常、アリが特定のノードに足を踏み入れる確率は、フェロモンの量に「善さ」の測定値を掛けたもので重み付けされます。たとえば、良さの測定値は、アリと餌の間の距離の逆数のようなものである可能性があります。これにより、以前のフェロモン沈着に関係なく、アリは餌に向かって移動しようとし続けます。良い点は、他の要因、例えば一部のノードは、他のノードよりも移動が簡単な場合があります。そして、エンダーランドが指摘するように、通常、パスの「選択」の形式が1度存在しますallのアリがコースを正常に実行し、「最良の」パスの一部のみがフェロモンの堆積に選択されます。ただし、「良さ」の選択に意味がある限り、選択しなくても妥当なパスを取得する必要があります。