Python Forum

Full Version: Finding global extrema of oscillating function
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello everyone. I have a function that behaves rather badly, and has plenty of local minima. I am interested to find the global one, but unfortunately the problem is really sensitive to the initial data that most algorithms need me to provide.

I am using scipy optimize, and the code looks a bit like this:

def target(n,p):
    w=[]
    for j in range(n):
        if j==p:
            w.append(1)
        else: w.append(0)
    return np.array(w)

def probability(x,G,n,p):
    t,gamma=x 
    w=target(n,p)
    U=expm(-1j*t*(gamma*nx.laplacian_matrix(G).todense()-np.outer(w,w)))
    psi=np.dot(U,flat(n))
    
    return -abs(np.dot(w,psi))*abs(np.dot(w,psi))

def allMinimized(G,n,p,b1,b2): #b1, b2 are the initial guesses for the two variables in x

    x0=[b1,b2]
    res=minimize(probability,x0,args=(G,n,p))
    return [-res.fun, res.x[0]]
From the documentation of optimize it is not clear to me how I could improve on the basic algorithm. Do you guys have any tips?