0

したがって、以下の状況でどちらの方法が最適かはわかりません。

地図上で道路に沿って移動する車両のシミュレーションがあります。それらを動かすことは問題なく、信号機などに従います。しかし、私の質問は、車両を動かす最も効率的な方法は何ですか。現在、道路ごとにスレッドがあるので、1つのスレッドが南から北に向かう道路に沿って車両を移動し、もう1つのスレッドが西から東に向かう道路に移動します。また、スレッドが車間の距離を追跡できるようにするのは難しいので、車が減速して互いに通り過ぎないようにすることができます。

Executorパッケージ内のクラスを使用してスレッドプールを作成し、java.util.concurrent車両ごとに1つのスレッドを作成し、車両がシミュレーションを終了したらスレッドを解放する必要がありますか?それともこれも遅くなりますか?

したがって、結論として、上記で明確にしなかった場合は、現在シミュレーション(マップ)にある車両を追跡するための最適な方法を見つけようとしています。道路ごとに1つのスレッドで車両を通過させようとしましたが、最終的には車両に独自のロジックが必要になるため、これは適切なソリューションではありません。

4

3 に答える 3

2

シミュレーション全体で1つのスレッドが必要になります。ロックのオーバーヘッド(CPUとコーディングのオーバーヘッド)は、複数のスレッドを持つことの利点よりも大きくなる可能性があります。

最終的には、車両に独自のロジックが必要になります。

のように各オブジェクトを呼び出すメソッドがありmove()、1つのスレッドですべてのオブジェクトに対して繰り返し呼び出されます。各車またはオブジェクトは、それがどのように動くべきかを知っています。

于 2013-01-30T11:28:53.613 に答える
0

車がどこに行くか、どれくらいの速さで、いつ止まるかなど、シミュレーションが実際に何をするかを知っておくとよいでしょう。とにかく、これは多くの車、道路、信号機で構成される大きなモデルのようです。また、マルチスレッドの場合は、十分に保護する必要があります(ロックまたは同期)。時間ステップに基づいて作業をジョブに分割し、各車を並行して見ることができますか?スレッドよりも小さなタスクで考える方が良いように思われるので、後でスレッドの数を選択できます。

于 2013-01-30T18:50:38.113 に答える
0

シミュレーションにAkkaのようなアクターモデルを使用してみませんか?アクターモデルは、(離散イベントシミュレーションとは対照的に)連続シミュレーションに使用されます。

于 2013-01-30T19:01:23.277 に答える