2

一部のエージェントの動作をシミュレートする MATLAB プログラムを作成したいと考えています。これらの各エージェントは、互いに通信することができ、次の状態を決定します。Java、Python、C++ などの慣れ親しんだ伝統的な言語でプログラムを実装し、スレッドを使用して各エージェントをシミュレートすることができます。

ここで、MATLAB での実装を試して、MATLAB プロット関数とその数学ツールを利用したいと考えています。そのようなシミュレーションを MATLAB で作成することは可能ですか? 並列処理ツールボックスについては知っていますが、MATLAB がそのようなアプリケーションに適しているかどうかはわかりません。シミュレーションを非並列にすることもできますが、それほど興味深いものではありません。これは課題の一部であり、MATLAB でこのようなシミュレーションを開始して、より慣れるのが良いかどうかを知りたいです。それが単純でない場合は、簡単に Python に切り替えることができます。

4

3 に答える 3

1

前述のように、実際には matlab で複数のプロセスを持つことはできません。

しかし、エージェントのクラスがハンドルから継承されている場合、エージェントを作成できます。次に、メッセージを受信する方法を提供できます。

ただし、それらは並行して実行されないことに注意してください。

于 2013-03-26T08:48:03.520 に答える
1

これが私がすることです:

  1. 必要なパラメーター、設定および取得するためのメソッド (または subsref-methods を記述する)、および「意思決定」のためのメソッドを使用して、matlab でエージェント クラスを記述します。
  2. クラスのインスタンスで配列を埋める
  3. インスタンス インデックスとその後に先行するインスタンスを含む配列を作成します。つまり、エージェント 4 がエージェント 1、2、および 3 をフォローし、エージェント 5 がエージェント 1、2、および 4 をフォローする場合、ベクトルは次のようになります。[4 1 2 3 5 1 2 4] など。または、親子マトリックスを作成します。インスタンスに先行を格納するパラメーターを追加することもできます。すべてのエージェントが相互に接続されている場合、この機能は必要ありません。
  4. これで、順次実行されます。すべてのエージェントが入力を更新し、すべてのエージェントが応答を計算して出力を設定します。

ご覧のとおり、これは並列ではなく順次です。ただし、ここでは並列処理の利点を実際に見ることはできません。ツールボックスは、自由に使えるコアの数に応じて「ワーカー」のみを許可するため、役に立ちません。基本的に、並列処理ツールボックスを使用しても、ループを並列化するためのものなので、あまりメリットはありません。たとえば、遺伝的アルゴリズムでは、すべてのプール メンバーのコスト関数を個別に計算できるため、ツールボックスを使用できます。1 つのループ実行が前のループ実行の計算に依存するアルゴリズムでは、ツールボックスを使用できません。

お役に立てれば。

于 2013-04-25T07:38:35.833 に答える
0

Matlab はコードを順番に解釈します。したがって、問題を解決するには、各サンプリング時間を繰り返し、定義済みの順序ですべてのエージェントの状態を評価するループが必要になります。

TimeMax  = 10;
TimeStep = 0.1;
time_counter = 0;
while time_counter<TimeMax  
  time_counter = time_counter + TimeStep; 
  % Update all the agents sequentially
end

これはあまり効率的ではありません。したがって、より自然に並列計算をサポートする Simulink を使用することをお勧めします。次に、結果を Matlab にエクスポートして、必要なすべての派手なプロットを実行できます。

于 2013-03-26T08:40:35.190 に答える