問題タブ [agent-based-modeling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
social-networking - リンクされたさまざまな種類の NetLogo エージェントのソーシャル ネットワークの作成
NetLogo で一種の「ソーシャル ネットワーク」を構築しようとしています。リンクでつながっている異年齢層の集まり。
NetLogo の構文のいくつかの部分にまだ完全に慣れていないため、組み立て方に問題があります。私は先週、自分のコードで品種を使い始めたばかりで、まだ完全に解決していません。それとも私がそれらを複雑にしすぎているのか、よくわかりません。
関連するコードを以下に示します。問題の機能は「ネットワークの作成」です。各エージェント (合計で約 800 になります) に、一定量の他のエージェントの各タイプに接続するように依頼する必要があります (他のエージェントが満杯にならない限り)。たとえば、カメが幼児種の場合、合計 10 個のリンクがあり、そのうち 5 個が他の幼児、2 個が子供、2 個が大人、1 個が 45 歳以上です。最初のノードが幼児で、大人に接続する場合、それが理にかなっていれば、大人のノードが到達したときに接続しようとする幼児の数を減らす必要があります。
現在のタートルに品種を尋ねる方法がわかりません。これにより、適切な数の適切な品種にリンクできます。誰かが私を助けてくれたら、私はめちゃくちゃ感謝します. これはコードのほんの一部ですが、ここ数日私を夢中にさせています
何かを試みるたびにエラーが発生し、アイデアも生きる意欲もなくなってしまいます。お時間をいただきありがとうございます。コードではなく、より良いアルゴリズムについて考えがある場合でも、それは大歓迎です
また、エージェント間のリンクを「一時停止」する機能ができないかどうかも考えています。たとえば、子の間のリンクの一部またはすべてをオフにします。リンクにタイモード属性があることは知っていますが、これができるかどうかはわかりません。私が読んだところによると、移動エージェントを一緒に保持することについてのように思えますか? リンクをオフにする方法として untie を使用できますが、リンクは引き続き存在しますか?
編集:リンクを非表示にする方が適切な場合があります。正しいリンクを非表示にする方法は次のことです
social-networking - ソーシャル ネットワーク内の特定のエージェントと品種間の特定のリンクを効果的に無効化する
以下と同様に、さまざまな年齢のエージェントのソーシャル ネットワークが NetLogo に設定され、リンクによって接続されたエージェントの輪ができます。これらのリンクの全体的な目的は、それらのリンク間の接触を表すことです。このモデルは、ネットワークを介した感染の広がりをシミュレートします。エージェントは感染しやすい状態から始まり、感染性のあるリンク ネイバーと接触すると感染する可能性があります。たとえば、感染した個人の隔離または検疫をモデル化したいと考えています。つまり、他のユーザーへのリンクが完全に無効化されるか、少なくともリンクの大部分が無効化されます。オブザーバー インターフェースのボタンを押して、感染したエージェントのリンクを非アクティブ化するのが理想的です。私' また、たとえば学校の閉鎖をモデル化できるようにしたいと考えています。これにより、大多数の幼児と子供、およびそれらの相互接続が無効になり、子供間の感染の可能性が停止します。大人へのリンクは、数が少ない場合はおそらく開いたままにする必要がありますが、今のところ一度に1つの品種間のリンクに焦点を当てる方が良いかもしれません.
ご覧のとおり、ここには 2 つの問題があります。1 つは、エンド ノードの状態または品種に基づくリンクの非アクティブ化です (理想的には、学校の閉鎖が終わった後、または感染した個人が回復したときに、再びオンにすることができます)。彼らがそうであること。
そして、非アクティブ化されたリンクを含めずに、感染したリンクネイバーの数をカウントするという2番目の問題。リンクを非表示にしても、リンクが存在しなくなるわけではなく、非表示になるだけで連絡先が停止するわけではありません。また、非アクティブ化されたリンクの色を単に黒などに変更することも検討しました。感染した隣人のカウントを書き換えて、たとえば黒または非表示ではないリンクのみをカウントする方法はありますset num-infected-neighbors count (link-neighbors with [infected? = true]
か...そして非表示のリンクはありますか? = false.... または link-color "!=" black?)
おそらく 2 番目の問題の方が簡単だと思いますが、間違っている可能性があります。私はこの段階であまりにも多くのレンガの壁にぶつかり、その問題で頭がいっぱいになりました。どんな助けでも本当に大歓迎です。すでにこれを読んでくれてありがとう、私はそれが少し暴言だったことに気づきました:) 以前に助けてくれたNicolas Payetteに再び感謝します
編集: クローズドにリンク独自のブール値を追加しましたか?
開いているリンクで感染した近隣の数をカウントするセクションを変更しようとしましたが、エラーが発生しました
this code can't be run by a link
error while link 14 15 running SET
called by procedure SPREAD
called by Button 'Spread'
また、閉鎖を設定することにより、すべての幼児リンクの非常に基本的な閉鎖を与える「閉鎖学校へ」の機能に追加されましたか? 真に
編集:これはここで可能な解決策でしょうか
編集:turtles-own
私が知る限り、num-infected-neighbors は変数である必要がありますが、カメに時計を付けてシミュレーションを実行すると、カメが持っている num-infected-neighbors は一貫して実際の数を上回っているようです。タートルが持っているリンクネイバー。それも間違っているだけです。理由はわかりませんが....
編集:
どちらも正常に動作していないようです...
編集:将来の参考のために、問題は-によって解決されました
最初に、閉じられていないリンクのリンクネイバーのリストが作成され、次にそれがフィルタリングされて、感染したリンクだけが表示されます。num-infected-neighbors はそのリストの長さです
agent-based-modeling - WebブラウザでRepastJモデルを実行することは可能ですか
私はエージェント ベースのモデリングは初めてで、RepastJ (Repast 3) に付属するデモ モデルを実行しています。Web ブラウザーでシミュレーションを実行することは可能ですか? 前もって感謝します。
performance - パフォーマンスを向上させるために、Netlogo で有向リンクの代わりにグローバル テーブルを使用することは良い考えですか? (答えはNO)
私は 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 を使用したケースを排除しました。たとえば、発信者エージェントと共通の関係を持つ他のエージェントを見つけるためにチェックしていたコードを置き換えました。最初のコードは非常に遅く、はるかに高速に動作する次のコードに置き換えました。
しかし、それでも他のエージェントに電話する必要がある場合が多いので、半径X内でエージェントに他のエージェントに尋ねるのは大丈夫だと思います!
最後に、私のシステムは、400 人のエージェントと15000 ~ 20000 のリンクに対して、より妥当な時間ではるかにうまく機能します:)
しかし、私はまだ改善の余地があると確信しています。あなたの役に立つ答えをありがとうセス:)
r - セッション全体の set.seed を修正する
R を使用して、モンテカルロ プロセスでエージェント ベースのモデルを構築しています。これは、ある種のランダム エンジンを使用する多くの関数を取得したことを意味します。再現可能な結果を得るには、シードを修正する必要があります。しかし、私が理解している限り、すべてのランダム ドローまたはサンプルの前にシードを設定する必要があります。これは首の本当の痛みです。種子を固定する方法はありますか?
r - R エージェントベースの近接性
R を使用して、すぐ近くにいる他のエージェントの決定に基づいて決定を変更するエージェントのグリッドをモデル化しようとしています。基本的に、各エージェントは、グリッド上で自分の周りにいる他のエージェントに目を向け、自分の周りのアクションに基づいて動作を変更する可能性があります。そのような動的な (1 回の反復) を示すために、以下にいくつかの小さなおもちゃのコードのサンプルを含めました。
私は疑問に思っています
グリッドの境界に対処する洗練された方法があります (現在、t+1、i+1 コードはエッジでは機能しません)。
または、マトリックスの「空間」次元を使用する/グラフベースのアプローチを使用してこれらの種類のモデルをシミュレートする他のアプローチがあるかどうか?
netlogo - NetLogo での強化学習の実装 (マルチエージェント モデルでの学習)
モデルにさまざまなタイプのエージェントの学習戦略を実装することを考えています。正直なところ、最初にどのような質問をすればよいか、どこから始めればよいか、まだわかりません。
経験によって習得してもらいたい 2 種類のエージェントがあり、発生する可能性のある特定の状況に基づいて、それぞれが異なる報酬を持つ一連のアクションを持っています。私は強化学習法に慣れていないので、どのような質問をすればよいかについての提案は大歓迎です:)
これが私の問題を定式化する方法です:
- エージェントには寿命があり、エージェントにとって重要ないくつかのことを追跡します。これらの指標はエージェントごとに異なります。たとえば、あるエージェントは A を増やしたいと考えており、別のエージェントは A よりも B を増やしたいと考えています。
- 状態は、エージェントの生涯におけるポイントであり、複数のオプションがあります (エージェントが動き回り、状況に直面することはない可能性があるため、状態が数回発生するか、まったく発生しない可能性があるため、状態の明確な定義はありません)
- 報酬は、エージェントが特定の状態のアクションから取得できる指標の増減であり、エージェントは別のアクションを選択した場合に何が得られるかわかりません。
- ゲインは一定ではなく、状態は明確に定義されておらず、ある状態から別の状態への正式な遷移はありません。
- たとえば、エージェントは同じ場所にいるエージェントの 1 人と共有するか (アクション 1)、同じ場所にいるすべてのエージェントと共有するか (アクション 2) を決めることができます。その他の条件 アクション 2 の報酬は高くなります。私の問題は、このシナリオでの共有は他のエージェントの特性 (報酬システムの条件に影響を与える) にも依存し、異なる状態では異なるため、不明な報酬の例を見たことがないことです。
私のモデルでは、アクションと次の状態の間に何の関係もありません。これは、この状況で RL について考えてよいかどうか疑問に思います。
ここで私が最適化しようとしているのは、エージェントが現在の状況をより適切な方法で推論し、内部状態によって引き起こされるニーズに対応するだけでなく、その能力です。彼らには、長期的な目標を定義し、さまざまな状況での意思決定に影響を与える可能性のあるいくつかの性格がありますが、ある状況でどのような行動をとったかが、優先する長期的な目標を高めるのに役立ったことを思い出してほしい.
java - GUI カラーでの 2D 配列の内容の表示
エージェント ベースのモデリング プログラムを作成中です。これまでのところ、シミュレーター、グリッド、さまざまなエージェントなどをモデル化するための関連クラスがあります。オブジェクトの 2D 配列も作成しました。たとえば、エージェントが配列の周りを移動して何でもします。
私は単純な GUI の作成に慣れていますが、GUI に追加されるペイン\パネルを作成するにはどうすればよいですか。これは、実行時の 2D 配列を、各オブジェクトに対応する色で表示します。また、MVC パターンを使用して、基本的にシミュレーション データを別の方法で表示したいと考えています。あるペインには異なるオブジェクトの色が表示され、別のペインには同じオブジェクトが表示されますが、すべてのオブジェクトは異なる赤の色合いで怒っています。同様のチュートリアルでも、ガイドラインは非常に役立ちます。
ありがとう
java - コレクションの変更による JPanel キャンバスの更新
エージェント (オブジェクト) のコレクションがあります。シミュレーターが開始されると、各エージェントは環境 (2D 配列) 内の位置を更新する act() メソッドを実行します。私の paintComponent(Graphics g) は別のクラスでオーバーライドされます (これは基本的に 2D 配列を反復処理し、エージェントのタイプに対応する長方形の色を描画します)。
しかし、実際のコレクションは、ユーザーが GUI からボタンをクリックすることによって独立して実行されるシミュレーター クラスにあります。paintComponent(Graphics g) の最後に repaint() メソッドを配置するとします。JPanel キャンバスを 2 回だけ更新します。1 回目はアプリケーションの起動時、2 回目はシミュレーションを開始する実行ボタンをクリックしたときです。
すべてのエージェントが act メソッドを実行したときに、新しいイメージで JPanel キャンバスを自動的に更新するにはどうすればよいですか。あるいは、コレクションでエージェントに変更が発生した場合、キャンバスに新しい場所を描画し、古い場所を削除しますか?