巧了,我的上一篇论文[1]里还真遇到过类似的问题。
这篇论文研究的是金属中的氢泡,简单来说就是在金属中挖个孔洞,然后往孔洞表面和芯部放氢原子。
吸附在孔洞表面的氢是带有一定电荷的,会互相排斥。所以我要尽量均匀的在表面放n个氢,以获得能量最低的结构。
当然,论文中的情况跟本题还是稍微有些不同:一方面,孔洞表面并不是平滑的球面,存在原子级别的凹凸不平(上图中的黑线就是孔洞表面),氢在这些凹凸处的能量不完全一样;另一方面,氢-氢之间的排斥势能大约是距离的-5次幂函数,而非点电荷的-1次幂函数。
我找出来的最低能结构大致长这样(删掉了上半部分的金属原子,不然就全挡住了):
由于答主数学功底比较差,推不出这种情况下的解析解,只能用数值方法暴力求解。当时用的是比较万金油的模拟退火算法:
通过这样一个逐渐降温的过程,最终有很大概率(并不是一定)能找到氢原子的最稳定分布。
模拟退火算法的优势,其一在于能够避免陷入局域的亚稳态,降温速率设置合理的话,找到全局最稳态的概率还是很大的;其二在于通用&易用性,函数长啥样不用管,只需要一步步瞎跑,然后根据 概率性的选择接受/拒绝这一步就行。
如果对模拟退火算法感兴趣,也可以看看我的这篇专栏文章[2]