Algorithm 这里介绍的粒子模拟数据结构/算法的正式名称是什么?

Algorithm 这里介绍的粒子模拟数据结构/算法的正式名称是什么?,algorithm,data-structures,language-agnostic,computer-science,simulation,Algorithm,Data Structures,Language Agnostic,Computer Science,Simulation,为了让计算机模拟宇宙中相互作用的n个粒子系统,可以使用以下粗略算法: for interval where dt=10ms for each particle a in universe for each particle b in universe interact(a,b,dt) for each particle a in universe integrate(a,dt) 它很重,每滴答声调用interactn^2次-因此,无法模拟许多粒子。不过,在大

为了让计算机模拟宇宙中相互作用的n个粒子系统,可以使用以下粗略算法:

for interval where dt=10ms
  for each particle a in universe
    for each particle b in universe
      interact(a,b,dt)
  for each particle a in universe
    integrate(a,dt)
它很重,每滴答声调用
interact
n^2次-因此,无法模拟许多粒子。不过,在大多数情况下,附近的粒子相互作用不太强烈。其思想是利用这一事实,创建一个图形,其中每个节点都是一个粒子,每个连接都是它们的距离。距离较近的粒子比距离较远的粒子更容易相互作用。比如说,

for interval where dt=10ms
  for each particle a in universe
    for each particle b where 0m <= distance to a < 10m
      interact(a,b,dt)
for interval where dt=20ms
  for each particle a in universe
    for each particle b where 10m <= distance to a < 20m
      interact(a,b,dt)
for interval where dt=40ms
  fro each particle a in universe
    for each particle a in b where 20m <= distance to a < 40m
      interact(a,b,dt)
(...etc)
for interval where dt=10ms
  for each particle a in universe
    integrate(a,dt)   
dt=10ms时的间隔

对于宇宙中的每一个粒子

对于每个粒子b,其中0m您描述的一般算法是a


我不认为你所描述的启发式算法有一个通用的名称。

你所描述的通用算法是一个


我认为您描述的启发式没有通用名称。

您正在进行时间步模拟,并使用称为本地化的性能增强启发式。

您正在进行时间步模拟,并使用称为本地化的性能增强启发式。

克服
O(n^2)
在每一步计算全套成对交互的成本,通常使用该方法实现此类模拟。这在精神上与您所描述的多分辨率想法类似

Barnes Hut是一种基于分层空间划分策略的全成对交互项的有效(
O(n*log(n))
)近似。粒子集被插入到一个(四叉树中的
R^2
),这是一个高度
O(log(n))
的空间索引树。除了包含指向其子级的指针外,树的每个级别的节点还包含其子粒子集的质心-树节点实际上是各种空间分辨率的集中“超级粒子”

当计算作用在特定粒子上的力时,树从根开始遍历,在每个节点上,决定是继续遍历到它的子节点,还是根据子节点的质心进行近似的“集中”贡献。通常,此决定基于质心与相关粒子的距离-如果质心“足够远”,则遍历终止,并采用“集中”近似

此策略确保仅在“短”粒子距离下计算完整(且昂贵)的成对相互作用,随着距离的增加,使用近似的“集中”相互作用

最先进的N体算法还为系统中的每个粒子加入了单独(和可变)的时间步长,以获得额外的效率,但这开始变得非常复杂

希望这能有所帮助。

为了克服在每一步计算全套成对交互的成本,通常使用这种方法来实现此类模拟。这在精神上与您所描述的多分辨率想法类似

Barnes Hut是一种基于分层空间划分策略的全成对交互项的有效(
O(n*log(n))
)近似。粒子集被插入到一个(四叉树中的
R^2
),这是一个高度
O(log(n))
的空间索引树。除了包含指向其子级的指针外,树的每个级别的节点还包含其子粒子集的质心-树节点实际上是各种空间分辨率的集中“超级粒子”

当计算作用在特定粒子上的力时,树从根开始遍历,在每个节点上,决定是继续遍历到它的子节点,还是根据子节点的质心进行近似的“集中”贡献。通常,此决定基于质心与相关粒子的距离-如果质心“足够远”,则遍历终止,并采用“集中”近似

此策略确保仅在“短”粒子距离下计算完整(且昂贵)的成对相互作用,随着距离的增加,使用近似的“集中”相互作用

最先进的N体算法还为系统中的每个粒子加入了单独(和可变)的时间步长,以获得额外的效率,但这开始变得非常复杂


希望这有帮助。

好的,谢谢。虽然这不是我理想化的算法,但这仍然是一个有见地的答案,因为我不知道您所描述的集总策略的细节。+1用于提及可变时间步长。正如你所说,它变得非常复杂,但是如果你想要一个精确的模拟,它是无法避免的。即使你想要一个“精确的”模拟——一个不能给出正确位置但能指示发生了什么事情的模拟——你也必须以某种形式来处理这个问题。基本上,舍入误差的累积往往会夸大系统的总能量(至少当我这样做时,它会增加),而应该受到引力约束的系统最终仍然会“爆炸”。这是一个很难解决的问题。谢谢。虽然这不是我理想化的算法,但这仍然是一个有见地的答案,因为我不知道您所描述的集总策略的细节。+1用于提及可变时间步长。正如你所说,它变得非常复杂,但是如果你想要一个精确的模拟,它是无法避免的。即使你想要一个“精确的”模拟——一个不能给出正确位置但能指示发生了什么事情的模拟——你也必须以某种形式来处理这个问题。基本上,舍入误差趋向于累积到o