Nagel-Schreckenberg モデルでは、交通シミュレーション内のすべての車について、次の 4 つの手順をシミュレーション内のすべての車に、以下に示す順序で並行して適用する必要があることを指定しています。
- 加速: 最大速度に達していないすべての車は、速度が 1 単位増加します。たとえば、ベロシティが 4 の場合、5 に増加します。
- 減速: すべての車をチェックして、前の車との距離 (セル単位) が現在の速度 (タイム ステップあたりのセル単位) よりも小さいかどうかを確認します。距離が速度よりも小さい場合、衝突を避けるために、速度は車の前にある空のセルの数まで減少します。たとえば、車の速度が現在 5 であるが、その前に空きセルが 3 つしかなく、4 番目のセルが別の車に占有されている場合、車の速度は 3 に減少します。
- ランダム化: 速度が 1 以上のすべての車の速度が、確率 p で 1 単位減少します。たとえば、p = 0.5 の場合、速度が 4 の場合、速度は 50% の確率で 3 に減少します。
- 車の動き: 最後に、すべての車が速度に等しいセル数だけ前進します。たとえば、速度が 3 の場合、車は 3 セル前進します。
この背後にあるロジックを理解しており、適切に機能させるために並行して実行する必要がある理由を理解しています。ただし、これをJavaで実装する方法がわかりません。並行して実行する必要があるため、すべての車のこれらすべてのステップをほぼ同時に実行するために、1 つの個別のスレッドが割り当てられていることを意味する必要がありますか?
シミュレーションで一度に実行できるのは、最大 30 台の車のスレッドではないでしょうか。私が考えることができる唯一の方法は、スレッドのプールを用意し、それらを再利用して、毎回スレッドを作成しないようにすることです。ただし、それが最適なソリューションであるとはまだ確信が持てません。
何かご意見は?