N体模拟优化,寻找名称或现有工作

计算科学 优化 算法 复杂
2021-12-05 08:19:20

在开发带有 WebGL 可视化的N 体模拟的过程中,我设计了一个优化方法,我想知道它是否有名称。我发现以前从未做过的可能性不大。

它的工作原理是这样的:在第一个时间步中,进行一次全对迭代。在该迭代期间,对于每个粒子:

  1. 将所有密切的相互作用存储在一个列表中 - 表示所有接近这个的粒子。从那时起,这些交互将在每个时间步进行评估。该列表通常包含少量条目。
  2. 迭代所有其他粒子并计算与粒子一起存储的净远力因此,这种净力在时间步长之间被记住并持续施加到粒子上。

然后随着模拟继续超过它的第一个时间步,以循环方式,每个时间步更新少量粒子的近距离相互作用净远力列表。因此,在一定数量的时间步长(例如 1000 步)内,所有粒子的近距离相互作用和净远力都将被更新。您不更新的那些只会检查它们的密切交互并应用净远力。在这个例子中,每个时间步的计算复杂度类似于N2/1000代替N2.

使这一点相当准确的一个技巧是更好地识别“密切交互”。有时接近度并不是最好的指标——你也可以考虑质量和相对速度等等。“最重要的相互作用”可能是一个更好的词。或“最有可能很快改变的互动”。

这种优化比 all-pairs 方法允许更多的交互粒子,但我不确定如何用 O() 术语来描述它,因为它不会在每个时间步都做出完整的解决方案,而是重用(稍微不正确)旧的信息并随着时间的推移分散计算工作量。

免责声明:我的 webgl 模拟也有“vfx”粒子,它只重力影响,不影响效果,所以它不像看起来那么快

那么这种优化技术有名字吗?

1个回答

您描述的方法有点类似于Barnes-Hut 算法主要区别在于你有一个单一级别的密切互动,而 Barnes-Hut 有logN.

在 Barnes-Hut 中,所有粒子都被放入一个octree中,并计算每个节点的元素之间的引力。然后计算复杂度下降到O(NlogN).

编辑:

原来你所提议的确实有一个名字:艾哈迈德-科恩方案计算速度的增益是(N/3.8)14.