对于交通模拟中的每辆给定汽车,Nagel-Schreckenberg 模型指定以下四个步骤必须按以下规定的顺序并行应用于模拟中的所有汽车:
- 加速度:所有未达到最大速度的汽车的速度增加一个单位。例如,如果速度为 4,则将其增加到 5。
- 减速:检查所有汽车以查看它与前面汽车之间的距离(以单元为单位)是否小于其当前速度(每个时间步长为单元单位)。如果距离小于速度,则速度会降低到汽车前方空单元的数量——以避免碰撞。例如,如果现在一辆车的速度为 5,但它前面只有 3 个空闲单元格,而第四个单元格被另一辆车占用,则汽车速度降低到 3。
- 随机化:所有速度至少为 1 的汽车的速度现在以 p 的概率减少一个单位。例如,如果 p = 0.5,那么如果速度为 4,则它减少到 3 50% 的时间。
- 汽车运动:最后,所有汽车向前移动的单元数等于它们的速度。例如,如果速度为 3,则汽车向前移动 3 个单元格。
我理解这背后的逻辑,我理解为什么它必须并行执行才能正常工作。但是,我不确定如何在 Java 中实现这一点。既然它必须并行执行,它必须意味着分配一个单独的线程来大致在同一时间为每辆车运行所有这些步骤?
对于我一次可以在模拟中运行的多达 30 辆汽车来说,这不是很多线程吗?我能想到的唯一方法是拥有一个线程池并重用它们以避免每次都创建线程。不过,我仍然不确定这是一个最佳解决方案。
有什么想法吗?