web-dev-qa-db-ja.com

Antコロニーアルゴリズム

私はコースプロジェクトのアリのコロニーシミュレータに取り組んでいる学生です。そのアルゴリズムは(明らかに)アリのコロニーのアルゴリズムです。アルゴリズムにはさまざまな形式があることは知っていますが、それらはすべて数学的に詳細すぎたため、次のようなアプローチを採用しました。

  • アリはコロニーで生まれ、コロニーを維持するために源から食物を集めなければなりません。
  • すべてのアリは似ています。
  • アリが動く領域は1000x1000グリッドなので、すべてのグリッドポイントは、アリが占める有効なポイントとして機能します。今、私が遭遇したすべてのアルゴリズムは、頂点とエッジを別々に扱うことを含みますが、アリの動きを4方向(上、下、左、右)だけに制限しているので、フェロモンをどこに置いても問題ではないと思います。
  • 上記の格子点はフェロモンを格納します。
  • アリは、食べ物を運ぶ場合にのみフェロモンをドロップします。
  • (i、j)の位置にあるアリの場合、隣接する4つのノードのフェロモン量を単純な確率式で考慮して、次のステップで移動する場所を決定します。ノードに移動する確率は、(特定の隣接ノードでのフェロモン量)/(4つの隣接ノードのフェロモン量の合計)で与えられます。
  • アリは元の位置に戻ることはできません。それができるのは、食物がある場所にあるか、コロニーにいる場合のみです。

今私の懸念は(そして実際に私たちのプログラムで何が起こっているのか)、アリが最初に食べ物を持っている位置に到達してそれを拾ったとき、アルゴリズムが機能する方法によって、それはどこにでも移動できるということです!これは、フェロモントレイルのみを残すためです。一度それが食物を手に入れれば、以前にではなく、最初のアリなので、既存のトレイルはありません。

アリがどこにでも移動できる場合、食物源に到達したアリは、ほとんどの場合、それに追従する傾向があります。たとえコロニーに向かって移動していなくても。これは、アルゴリズム全体の目的を無効にします。

だから私の質問は

  • 上記の懸念は有効ですか?いいえの場合、なぜですか?はいの場合、どのように対処しますか?
  • アルゴリズムを実際に機能させるために、アルゴリズムの基本的な理解にいくつかの変更を加える必要がありますか?
  • この場合、私のような初心者が見逃す可能性のある他の微妙で重要なものは何ですか?
13
transistor

これはACOの動作方法ではありません。 ACOは、アリがグリッド内のすべてのポイントを移動した後にのみフェロモンをドロップします。次に、何か(おそらく総移動時間)を評価し、良いアリのフェロモンをドロップして、繰り返します。

実装固有にカスタマイズすることはできますが、通常は同じ頂点に2回移動することはありません。

フェロモンは移動するたびにドロップされるのではなく、どこに移動した後もドロップされます何かが評価されますどのアリがより良いかを決定します。より優れているアリはフェロモンを落とします(おそらく最高の25%のパフォーマンスのアリ)。

6
enderland

私が他の人から見た実装、および私が自分用に作成した実装は、餌に到達した後、アリが常に食べ物にたどり着くまでの経路に沿ってフェロモンを解放させていました。つまり、アリはランダムに散歩した後、コロニーから餌まで行進します。アリがたどる経路コロニーから食物までは、フェロモンを使用してマークされます後のみアリは食物に到達することに成功しました。復路は明示的にシミュレートされていません。一般に、現在の反復でフェロモンが配置される前に、複数のアリがコースを実行します。次に、フェロモンが成功したパスに展開され、新しいラウンドが始まります。

通常、アリが特定のノードに足を踏み入れる確率は、フェロモンの量に「善さ」の測定値を掛けたもので重み付けされます。たとえば、良さの測定値は、アリと餌の間の距離の逆数のようなものである可能性があります。これにより、以前のフェロモン沈着に関係なく、アリは餌に向かって移動しようとし続けます。良い点は、他の要因、例えば一部のノードは、他のノードよりも移動が簡単な場合があります。そして、エンダーランドが指摘するように、通常、パスの「選択」の形式が1度存在しますallのアリがコースを正常に実行し、「最良の」パスの一部のみがフェロモンの堆積に選択されます。ただし、「良さ」の選択に意味がある限り、選択しなくても妥当なパスを取得する必要があります。

1
Eric Greenwood