在我研究的大多数蒙特卡洛算法中,我发现,在它们计算能量的地方,总是一行代码,它们被四除。
例如,此代码片段取自 此处
def Energy(Q):
starting_energy=0
for i in range(len(Q)):
for j in range(len(Q)):
g=Q[i,j]
n_y=Q[(i+1)%num,j]+Q[i,(j+1)%num]+Q[(i-1)%num,j]+Q[i,(j-1)%num]
starting_energy+=g*-n_y
return starting_energy/4
另一个例子可以在这里找到
def calcEnergy(config):
'''Energy of a given configuration'''
energy = 0
for i in range(len(config)):
for j in range(len(config)):
S = config[i,j]
nb = config[(i+1)%N, j] + config[i,(j+1)%N] + config[(i-1)%N, j] + config[i,(j-1)%N]
energy += -nb*S
return energy/4.
根据我的理解,我们想要计算自旋配置的能量,包括我们当前正在查看的自旋加上它最近的邻居。所以总而言之,我们在这个函数中计算了 5 个 ising-spins。
那么为什么返回return energy/4
而不是正确return energy/5
呢?