問題タブ [multi-agent]

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.

0 投票する
1 に答える
241 参照

netlogo - マルチエージェント システムのシミュレーションに最適なツールボックス

マルチエージェント システムをシミュレートしたい。netlogo はそのために適していますか? あらゆる特性を持つすべてのマルチエージェント システムをシミュレートする優れた機能がありますか。netlogo はグラフィックが得意ですか? netlogo を使用してエージェント間でタスクを共有できますか? netlogo で機能分析を行うことはできますか?

他にどんなツールボックスをお勧めしますか?

0 投票する
1 に答える
95 参照

optimization - NetLogo モデルをより良くする方法は? (コード構造)

go プロシージャですべてのエージェントに 1 回尋ねるモデルがあり、エージェントがその条件を持っている場合、残りのプロデューサーは条件で開始します。

これを別の方法で行うには、条件に [条件] を使用してエージェントに依頼し、進行中の依頼手続きを省略します。

最初のアプローチを使用してモデル全体を作成しましたが、2 番目のアプローチでテストするには非常に時間がかかります。これら 2 つのアプローチがパフォーマンスに与える影響を誰かが見つけたことがあるかどうか疑問に思っていました (違いがある場合)。 )

0 投票する
1 に答える
426 参照

qt - OOP での OpenGL による描画

最新のパイプライン実装の方法で、OS X 10.9 で Qt (v5.1.1) を使用して OpenGL プロジェクトをコーディングしようとしています。このプログラムは、マルチエージェント ベースのシステムまたはパーティクル システムであると想定されています。しかし、私は別のクラスから何かを引き出す方法を理解していません。

cinder には、呼び出すことができる単純な drawThisAndThat() コマンドがいくつかありました。「OpenGL Superbible」の第 6 版を読みました。これといくつかのチュートリアルから、すべての例は、OpenGL を初期化するクラスからすべての変更が行われたプログラムのみをカバーしているようです。

グリッド上を移動するいくつかのオブジェクトをインスタンス化し、ピクセルを描画してその位置を表示したいと思います。私は電話しなければならないことを知っていますvoid glVertexAttrib4fv(GLuint index, const GLfloat * vi);が、これでは十分ではありません。

  • 電話する必要がありglEnableVertexAttribArray(1);ますglDrawArrays(GL_POINTS, 0, 3);か? 他に何がありますか?
  • OpenGL をインスタンス化し、メイン ループを処理した後で、パーティクルを制御するクラスをインスタンス化するのは正しいですか?
  • パーティクルが以前に描画された位置を消去しながら、パーティクルが自分自身を描画するようにするにはどうすればよいですか?

プログラムはこのコードに基づいています。

0 投票する
1 に答える
1357 参照

netlogo - 各ティックで patch と turtle の変数にアクセスするより良い方法はありますか?

各ティックで各タートルの資産変数を更新する必要があります。これは、呼び出しの数がプロファイラー リストの一番上にあります。

ほとんどの計算時間は、家に同じパッチを使用している他のエージェントの数を計算し、各タートルのシェアを計算することに費やされると確信しています。food_carrying と my-home は turtle のプロパティで、Storage は patch のプロパティです。

それを行うためのより良い方法を考えられますか?

0 投票する
1 に答える
71 参照

simulation - これは、ゴールへの経路上で「仲間」を探して交じり合う歩行者の動きに許容できるアルゴリズムですか?

最初に疑似コードをここに置きます。実際の歩行者の動きによるその有効性と、それを改善する方法についてアドバイスしてください。

前提: スポーン地点からゴールまで亀が歩く。途中、他のカメと遭遇。同じ色のカメは「仲間」として扱われ、「友達が通りを歩いている」シナリオをシミュレートして、その近くに行きます。距離が近い同じ色のカメが優先されます。たとえば、友達 A は友達 B よりも近いので、最初に友達 A に近づきます。

ゴールに近づくと、カメはスポーン ポイントに戻ります。

擬似コード:

改善のためのアドバイスをお願いします?

0 投票する
2 に答える
757 参照

c# - .NET マルチエージェント シミュレーションのプラグイン アーキテクチャ (ランタイム ロード/アンロード)

説明

私は現在、C# マルチエージェント シミュレーション用のアーキテクチャを設計しています。このアーキテクチャでは、エージェントのアクションは、センサーを読み取ったり、アクションに投票したり、他のモジュールにメッセージやクエリを送信したりする「頭脳」内の多くのモジュールによって駆動されます (これらはすべて、メッセージの交換)。もちろん、モジュールは状態を持つことができます。

モジュールは並行して実行されます。メッセージとクエリを消費し、何らかの計算を実行する update メソッドがあります。update メソッドは反復子を返し、その本体に複数の yield があるため、モジュールを協調的にスケジュールできます。エージェントごとに数百から数千のモジュールがあると予想されるため、モジュールごとに単一のスレッドを使用しません。これにより、スレッドのオーバーヘッドによって膨大な量の RAM が占有されることになります。

これらのモジュールをランタイム プラグインのように動作させて、シミュレーションの実行中に新しいモジュール クラスを追加し、シミュレーション プロセスを停止することなく既存のクラスを書き換え/デバッグし、それらのクラスを使用してモジュールを追加および削除できるようにしたいと考えています。エージェントの頭脳、またはメソッドの新しい実装により、既存のモジュールに動作を変更させるだけです。

可能な解決策

私はここ数日でいくつかの可能な解決策を考え出しましたが、どれもがっかりしました:

  1. モジュールを DLL にコンパイルし、それぞれを別のAppDomainにロードしてから、AppDomain.CreateInstanceFromAndUnwrap() を使用してモジュールをインスタンス化し、それをいくつかの IModule インターフェイスにキャストして、シミュレーションとモジュールの間で共有 (および各モジュール クラスによって実装) します。 . インターフェイスは、SendMessage、Update、およびすべてのモジュールに共通の他のいくつかのメンバーのみを公開します。

    • このソリューションの問題は、AppDomain 間の呼び出しが (同じ AppDomain 内の) 直接呼び出しよりもはるかに遅いことです。
    • また、AppDomains のオーバーヘッドはわかりませんが、無料ではないので、何千もあると問題になる可能性があります。
  2. アセンブリのロード/アンロードがないように、モジュールにはスクリプト言語を使用し、基になるエンジンには C# を使用します。代わりに、各モジュールのスクリプト言語の実行コンテキストをホストします。

    • 私の主な懸念は、大きなスクリプト言語 (「python、lua、ruby、js は大きく、Autoit と Euphoria はそうではない」など) を知らないことです。モジュール実行の協調スケジューリングを実行するために必要です)。
    • これに関するもう 1 つの懸念は、モジュールごとにランタイム コンテキストを使用する必要があり、その結果、膨大なオーバーヘッドが発生することです。
    • 最後に、スクリプト言語はおそらく C# よりも遅く、パフォーマンスが低下すると思います。
  3. アセンブリのアンロードを避け、代わりに何らかの方法で名前を変更/バージョン付けして、さまざまなバージョンを多数持つことができるようにし、タイプごとに最新のものを使用します。

    • これが可能かどうかさえわかりません(不愉快な型と名前空間のため)
    • たとえ可能であったとしても、それは非常にメモリ効率が悪いでしょう。
  4. 透過的にシミュレーションを再開します。つまり、シミュレーション (およびブレイン/モジュールのスケジューラーの実行) を一時停止し、すべて (すべてのモジュールを含む) をシリアル化し、シミュレーションを終了し、コードを再コンパイルし、シミュレーションを再度開始し、すべてを逆シリアル化し、キャッチします。クラスに変更を加えて実行を再開したために発生した例外。

    • これは大変な作業なので、最後の手段と考えています。
    • また、このプロセス全体は、モジュールの数とそのサイズによっては、ある時点で非常に遅くなり、実用的ではなくなります

この最後の問題 (ソリューション 4 のプロセス全体が遅くなる) を解決するには、ソリューション 3 と 4 を混ぜ合わせ、多数のアセンブリを何らかの形式のバージョン管理で読み込み、時々再起動して混乱を解消します。それでも、モジュール クラスに小さな変更を加えたからといって、シミュレーション全体を中断しないものを好むでしょう。

実際の質問

だからここに私の質問があります:他の解決策はありますか?私が見つけた問題の回避策を見逃していませんか? たとえば、私のニーズを満たす .NET 用のスクリプト言語はありますか (解決策 #2)? 私が漠然と説明した方法でバージョン管理は可能ですか (解決策 #3)?

または、もっと簡単に言うと、.NET はこのプロジェクトのプラットフォームとして適切ではないのでしょうか? (C# がメインの言語なので、このまま使い続けたいと思っていますが、必要に応じて Python などでこれを行うことも考えられます)

0 投票する
1 に答える
86 参照

simulation - タートル自身の変数にタートルを代入する際のエラー

私は、円錐視野が 5, 120 に定義されているタートルを持っています。今度は、タートルに、その友人と同じ色の最も近いタートルを割り当てるようにします。私のコードはエラーを返します

これは私のコードです

エラーは

3行目。ここで何が問題なのですか?

0 投票する
1 に答える
1206 参照

java - AKKA vs JADEがエージェントシステムを代表

私は、交通信号制御機を (マスター) エージェントとして表し、相互に通信するプロジェクトに取り組んでいます。これにはJADEを使おうと思っていたのですが、AKKAに出会いました。AKKA について読んだところ、マスターが 1 つあり、マスターが最初にワーカーを作成することがわかりました。その場合、(すべてのマスター) エージェント表現を実装するにはどうすればよいですか?

0 投票する
2 に答える
768 参照

java - マルチエージェント開発におけるプレーン Java と JADE フレームワークの比較

タスクがマルチエージェント システム (たとえば、ベンチマークのブック オークション システム) を構築することであり、2 つのオプションがある場合:

  • 各エージェントがスレッドであるプレーン Java を使用して構築し、ネイティブ Java 機能を利用します。
  • JADE Java フレームワークを使用します。

これらの各アプローチを使用することの長所と短所は何ですか?

0 投票する
2 に答える
393 参照

java - JADE_mulli エージェントシステム

Java で実装された JADE にエージェントをデプロイできません。代替手段はありますか?