Javaのエージェントベースのモデリング - アニメーションの質問
-
28-10-2019 - |
質問
私は作成しています エージェントベースのモデリングプログラム Javaで。
エージェントをアニメーション化する最良の方法を決定しようとしています。グリッドを使用するいくつかの例を見てきたので、各エージェントは一度に1つのセルのみを占有できます。
私はよりスムーズなものを探しています。エージェントは、すべての方向に窓を「流れる」ことができます。
助言がありますか?
ありがとう!
編集:
環境はシンプルで2次元になります。 1つのエージェントから数百のエージェントから数百のエージェントがあります。
エージェントを、方向を何らかの兆候に備えた小さな円として表現したいと思います(詳細は無関係です。エージェントが回転する能力が必要だということです)。
2回目の編集:
私は現在、このチュートリアルを読んでいます: http://www.giosoft.net/development/java-asteroids-tutorial.html
それは私が達成しようとしていることに役立つようです。
解決
あなたが本当に何を求めているのかわからない。おそらくあなたはこれらの3つの質問を尋ねている(または尋ねるつもりだったのでしょうか?
「エージェントベースのモデルでは、エージェントを宇宙でどのように表現すればよいですか?」
エージェントベースのモデリングを行うときは、ドメインにとって理にかなっている方法でシミュレーションを設計する必要があります。ここの誰も、あなたのドメインについて何らかの考えを持っていない限り、どのような空間的選択をするかについて合理的な答えを与えることはできません。
2つまたは3つの寸法視覚化を使用する場合があります。トロイダルスペースを使用することをお勧めします。グリッド(離散XおよびY寸法など)を課すか、連続スペースを可能にする場合があります。近接性に関する特定のルールがある場合があります(たとえば、1つのエージェントのみが一度に1つのグリッドスペースを占有できます)。他の一連のルールを使用したい場合があります。
繰り返しますが、重要なのは、ドメインにとって理にかなっている一連のルールを見つけることです。モデルに不可欠な種類の動作をまだ作成する最も単純なルールのセットを見つけることをお勧めします。
「Javaベースのアニメーションライブラリを考慮すべきですか?」
エージェントベースのモデルの空間的側面を決定したら、 それから 表示するために使用するテクノロジーを決定する準備ができています。これは幅広いトピックですが、Piccolo2D、Javafx、Java 2D、およびJava 3Dの処理をご覧ください。
実際、この質問は上記よりも少し広いです。あなたはおそらく単なるアニメーション以上のものを気にするでしょう。エージェントベースのモデルは、GUIおよび/またはコマンドラインインターフェイスによって駆動される場合があります。 GUIが必要な場合は、モデルパラメーターを調整できるように、さまざまな入力コントロールが必要になります。少なくとも、SwingとJavafxを検討したいと思います。
「エージェントベースのモデルの構築を支援するために、どのツールキットまたはライブラリを使用する必要がありますか?」
エージェントベースのモデリングツールのウィキペディア比較 私がこれまでに見た中で最も包括的なリストですが、それはあなたを圧倒するかもしれません。私の経験では、同僚と仲間は、Netlogo、Repast Simphony、Anylogic、またはMasonの1つ以上の1つ以上に引き寄せられる傾向があります。一部の人々(私を含む)は、しばしば自分自身を転がす方が速くなると感じています。そのルートに行く場合は、Ruby、Scala、Pythonなどの高レベルの言語を見て、低レベルの言語詳細の代わりにドメインロジックに集中できるようにすることを強くお勧めします。
他のヒント
2000年から2006年の間に、私はマルチエージェントシステムを専門とするオランダの会社であるTryllianで働いていました。会社は現在非アクティブです。
Tryllianでの最初のアイデアは、エージェントベースの検索アプライアンス(ゴシップと呼ばれる)を構築することでした。これには、かわいい目を持つ多くの明るい色の円形のエージェントを備えたグラフィカルなクライアントアプリがありました。各エージェントには、「バックパック」をドラッグできる背中にギャップがありました。バックパックには、検索クエリと多数の検索結果(URL、ドキュメント、画像など)が含まれている場合があります。検索を行うために、ユーザーは、準備されたバックパックを持ってエージェントを「ポータルにポータル」にドラッグする必要がありました。その後、エージェントは、サーバー上に住んでいた「バトラーエージェント」によって「トピックルーム」に向けられるトリリアンサーバーに「テレポート」されます。部屋では、他のエージェントとやり取りし、検索の関心と補給を交換することができます。まだゴシップをダウンロードできるようです ここ.
その後、Tryllianは、Gossipのようなエージェントアプリケーションをより簡単に作成できるエージェント開発キット(ADK)を開発することを決定しました。プログラミングエージェントの動作のためのタスクベースのモデルを提供しました。エージェントは多くのイベント(エージェントスタートなど)を取得し、イベントでは、ハンドラーがタスクを追加し、イベント(タスクスタートなど)を取得し、より複雑な動作(おそらくサブタスクの形で)をスケジュールすることができます。 APIは非常にうまく行われました。
ADKの重要な機能は、私の意見では、それが提供したコードモビリティでした。エージェントがローカルの仮想ルーム間を移動できるだけでなく(エージェントランタイム環境)、別のサーバーに移動することもできます。これには、クラスのシリアル化と、当時は非常に革新的だったマルチクラスローダーソリューションが含まれていました(私たちは考えるのが好きでした)。この機能により、データを渡すのではなくデータにコードを提供するデザインが可能になりました(データをポンプで汲み上げることは、私が知っているほとんどのエンタープライズシステムの主要な機能です)。たとえば、Tryllianは、監査会社のアナリストが監査ルールをエージェントにエンコードし、クライアントのサーバーに安全に送信してプロセスを監視できるリモート監査アプリケーションを開発しました。
この回答が得られる前に停止します 本当 長いです (-;
これはおそらく、あなたが今達成しようとしているものよりも少し多いでしょう。あなたの質問をもう少し具体的に定式化できるなら、私はあなたのマルチエージェントシステムをセットアップする方法についていくつかのアドバイスをすることができます(エージェント間のメッセージングをモデル化する方法も非常に絡み合っているトピックです - ああ、申し訳ありませんが、私はやめました。 ..)。
あなたのマルチエージェントシステムの目的は何でしょうか?エージェントは何をしますか? 1つのマシンで実行されますか、それとも配布されますか?エージェントは、動作/ルールがハードコーディング、構成可能、または完全に動的ですか?
最後の提案:単純なエージェントのモデリングについて考えるための合理的な出発点は センスプランアクト 通常、ロボットに関連付けられています。
編集:コメントへの応答
Tryllianエージェントモデルは、シミュレートされた物理的環境との緊密な相互作用よりもメッセージングに重点を置いています。投稿したサイトを見ると、特にエージェントの数が増える場合、パフォーマンスは非常に重要であるようです。トライリアンエージェントの長所を活用することはありません:コードモビリティ、タスクベースのプログラミング、ジェネリティなので、このようなシミュレーションに最適なツールではないと思います。
「グリッド」と「スムーズな」アプローチについて言及します。コンピューターシミュレーションでは、ある種の個別の座標システム内で、エージェントのサイズ、座標、速度、方向を常に表す必要があると思います。したがって、常にある種のグリッドがありますが、「セル」を小さくして、より滑らかに見えるようにすることができます。
たぶん、ゲームドメインにある有用なリソースがありますか? (スプライト、衝突検出など)
頑張って楽しんでね!