How to access the local minimum in basin hopping?

问题描述 投票:0回答:0

我正在使用 basin-hopping 算法来寻找 Lennard-Jones 簇的能量最小值并使用参数来获得最佳结果。但是,我还想绘制每次迭代发生时的最低能量,以便我可以绘制盆地跳跃达到最低能量所需的步骤。我知道 .fun 可用于访问最后一次迭代,但无论如何我可以访问其他迭代中的那些吗?

from scipy.optimize import basinhopping
import numpy as np
import matplotlib.pyplot as plt

def LJ(r):
    r6 = r**6
    r12 = r6*r6
    return 4*(1/r12 - 1/r6)

def total_energy(positions):
    """
    Calculate the total energy
    input:
    positions: 3*N array which represents the atomic positions
    output
    E: the total energy
    """

    E = 0.0
    ## positions = [1,2,3,1,2,2] for 2 atoms
    N_atom = int(len(positions)/3)
    pos = positions.reshape(N_atom,3)
    for i in range(N_atom - 1):
        for j in range(i+1,N_atom):
            pos1 = pos[i]
            pos2 = pos[j]
            dist = np.linalg.norm(pos1-pos2)
            E += LJ(dist)
    return E    

def init_pos(N,L=5):
    return L*np.random.random_sample((N*3))


n_atom = 11
# reference min: -32.765970
iter_num = 50
minimizer_dict = dict(method='BFGS')
pos = init_pos(n_atom)
res = basinhopping(total_energy, pos, niter=iter_num, T=5.0, stepsize=5.0, disp=True,         minimizer_kwargs = minimizer_dict)

我不知道在此之后要做什么才能在每次迭代后访问最小值

python scipy-optimize minimization
© www.soinside.com 2019 - 2024. All rights reserved.