在开发带有 WebGL 可视化的N 体模拟的过程中,我设计了一个优化方法,我想知道它是否有名称。我发现以前从未做过的可能性不大。
它的工作原理是这样的:在第一个时间步中,进行一次全对迭代。在该迭代期间,对于每个粒子:
- 将所有密切的相互作用存储在一个列表中 - 表示所有接近这个的粒子。从那时起,这些交互将在每个时间步进行评估。该列表通常包含少量条目。
- 迭代所有其他粒子并计算与粒子一起存储的净远力。因此,这种净力在时间步长之间被记住并持续施加到粒子上。
然后随着模拟继续超过它的第一个时间步,以循环方式,每个时间步更新少量粒子的近距离相互作用和净远力列表。因此,在一定数量的时间步长(例如 1000 步)内,所有粒子的近距离相互作用和净远力都将被更新。您不更新的那些只会检查它们的密切交互并应用净远力。在这个例子中,每个时间步的计算复杂度类似于代替.
使这一点相当准确的一个技巧是更好地识别“密切交互”。有时接近度并不是最好的指标——你也可以考虑质量和相对速度等等。“最重要的相互作用”可能是一个更好的词。或“最有可能很快改变的互动”。
这种优化比 all-pairs 方法允许更多的交互粒子,但我不确定如何用 O() 术语来描述它,因为它不会在每个时间步都做出完整的解决方案,而是重用(稍微不正确)旧的信息并随着时间的推移分散计算工作量。
(免责声明:我的 webgl 模拟也有“vfx”粒子,它只受重力影响,不影响效果,所以它不像看起来那么快)
那么这种优化技术有名字吗?