私は 100 人未満のエージェント (20 * 20 ワールド サイズ) で適切に機能するモデルを持っていますが、現在のモデル要件の 1 つは、エージェントのさまざまなグループに対してモデルをテストすることであり、100 人を超えるエージェント (および 40 * 40ワールドサイズ)。各機能を個別に最適化しようとしましたが、残念ながら、モデルの要件を破壊せずに変更できるものは何も残っていません。
現在のバージョンでは、リンクを使用してエージェントの関係を追跡しています。各エージェントが持つことができるリンクの数に制限はありません。そのため、リンクの数は急速に増加します (2000 以上のリンク)。各リンクを更新する必要があります。各インタラクション後の関係値。
私のモデルでのリンクの使用についてもう少し詳しく:
エージェントは、ソーシャル インタラクションがある場合、相互にリンクの値と頻度を作成/更新します
多くのエージェントは、そのエージェントの異常な社会的活動を観察すると、1 つのエージェントとのリンク値と頻度を作成または更新します (これらの活動のさまざまなグループが定義されており、活動の種類に基づいてさまざまなアクションが呼び出されます)。
エージェントは、同じパッチにある場合、同じ場所にあるエージェント リンクの値を観察し、それに従って、さまざまな種類の社会的相互作用を行う可能性があります。
特定の年齢層のエージェントは、リンク値とその他の基準に基づいて相手を見つけます。
また、今は思い出せないかもしれませんが、リンクの値は各ティックで何度も呼び出されています。エージェントの有効期間は 4000 で、シミュレーションの長さは 40000 ティックです。エージェントが 100 の場合、実行に 10 ~ 15 分かかります。シミュレーションですが、200 エージェントの場合、わずか 2000 ティックを完了するのに 10 分かかります!
より多くのエージェントのモデルをテストするのに大きな問題があるため、すべてのリンクを削除し、エージェントの各ペアとその関係値と関係の頻度を含むグローバル テーブルを使用することを考えていましたが、リンクの使用は非常に簡単なので、値の設定と取得が困難。
これを行うためのより良い方法について誰か考えがありますか? または、netlogo モデルをスケーラブルにする方法は?
更新: こんにちは、私は何度も何度もチェックしましたが、私のプログラミングスタイルが私のプログラムを遅くしていると確信しています.リンクを非表示に設定しているため、そのうちの1つは本当に愚かです!!! そして、リンクが作成されるたびに hide-link を設定することができました! もう一度尋ねることなく:D
さらに、 out-link neighbors 、 links 、および out-link に対して ask または with を使用したケースを排除しました。たとえば、発信者エージェントと共通の関係を持つ他のエージェントを見つけるためにチェックしていたコードを置き換えました。最初のコードは非常に遅く、はるかに高速に動作する次のコードに置き換えました。
Let Agents_I_Met out-link-neighbors
if any? other agents-here with [any? out-link-neighbors with [member? self Agents_I_Met ]]
[
Let Other_Agent one-of other agents-here with [any? out-link-neighbors with [member? self Agents_I_Met ]]
Let CommonAgent one-of Agents_I_Met with [member? Other_Agent in-link-neighbors ]
...
しかし、それでも他のエージェントに電話する必要がある場合が多いので、半径X内でエージェントに他のエージェントに尋ねるのは大丈夫だと思います!
最後に、私のシステムは、400 人のエージェントと15000 ~ 20000 のリンクに対して、より妥当な時間ではるかにうまく機能します:)
しかし、私はまだ改善の余地があると確信しています。あなたの役に立つ答えをありがとうセス:)