资讯

邻居搜索是什么?分子模拟中快速找出每个原子周围的原子

2026-11-052 分钟阅读百科
TL;DR邻居搜索指在分子动力学等粒子模拟中,确定每个粒子(通常是原子)在一定距离内有哪些相邻粒子的过程,用于高效计算范德华力等短程相互作用,常用单元列表和邻居列表等方法加速。

邻居搜索(Neighbor Search)在分子模拟中指找出每个原子周围有哪些邻近原子的过程。在分子动力学模拟里,计算机要模拟成千上万甚至数百万个原子在一个模拟盒子中如何运动,每一步都要计算原子之间的相互作用力,比如范德华力和短程排斥力。邻居搜索就是为这一步做准备:先确定每个原子身边有哪些“邻居”,再只计算邻居之间的作用力。从更一般的意义上说,它也是在数据集中快速定位与某个点距离最近的点或一组点的问题。

为什么需要邻居搜索

粒子之间的很多相互作用只在短距离内才显著,超过一定的距离(截断半径)就小到可以忽略。如果不加区分地计算每一对原子之间的作用力,一百万个原子就有大约五千亿对,计算量随原子数的平方增长,根本算不过来。既然远处的原子影响可以忽略,那么对每个原子,只需要考虑截断半径以内的那些邻居。关键就在于:如何快速地找出这些邻居,而不是先算出所有原子对的距离再筛选。

常用的方法

单元列表(Cell List):把模拟盒子划分成许多小格子,每个格子的边长不小于截断半径。每个原子被放进它所在的格子。查找某个原子的邻居时,只需要检查它所在的格子以及相邻的格子,而不必检查整个盒子。这让计算量随原子数量线性增长。

邻居列表(Verlet List):为每个原子维护一份邻居名单,名单的半径比截断半径略大一些,留出一层“缓冲区”。因为原子在每一步只移动很小的距离,这份名单可以连续用好几步,等原子移动得足够远时才重新生成,进一步节省了计算。实际中常把两种方法结合使用:用单元列表快速构建邻居列表。

和 AI 的关系

近年来,机器学习被大量用于分子模拟,比如用神经网络势函数替代传统的力场,以更高的精度预测原子间的作用力。这类图神经网络通常把原子看作节点、把截断半径内的原子对看作边,构建图的过程本身就依赖邻居搜索,它的效率直接影响整个模拟的速度。在 GPU 上高效地实现邻居搜索,是加速 AI 驱动的分子模拟的重要环节。