我的SPSA(同步扰动随机逼近优化器)的实现有什么问题?

时间:2019-11-13 12:50:12

标签: python optimization stochastic

这是我尝试为多项式x ^ 4-x ^ 2实现SPSA优化。我确定我的代码仅适用于1维,但似乎根本不起作用。我也认识到,当您没有要最小化的功能时,通常会使用SPSA。它来自诸如机器人运动之类的包含噪声的测量。也许是因为我没有以正确的方式使用np.random.binomial?我使用了来自该网站https://www.jhuapl.edu/SPSA/PDF-SPSA/Matlab-SPSA_Alg.pdf的伪代码来尝试实施它。对不起,我不习惯使用stackoverflow的阻塞代码。请随时提出其他建议,以说明如何改进它。谢谢你的时间。

import numpy as np 

def SPSA(alpha,gamma,lowa,A,c,iterations,theta):

dimension=len(theta)

ppar = [1,0, -1, 0, 0]

p = np.poly1d(ppar)

# declare vector function quantities
gradient=np.zeros(dimension)
delta=np.zeros(dimension)
delta=np.random.binomial(3,.4, dimension)
if delta==0:
    print('error delta')
else:
    print('this is our delta')
    print(delta)
# simple for loop implementation as variables iterate
    i=0
    while i<=iterations:
        ak=lowa/np.power(i+1+A,alpha)
        ck=c/np.power(i+1,gamma)
        thetaplus=theta+ck*delta
        thetaminus=theta-ck*delta
        yplus=p(thetaplus)
        yminus=p(thetaminus)
        gradient=yplus-yminus/(2*ck*delta)
        theta=theta-ak*gradient
        print('graident, theta and F(theta)')
        return gradient,theta, p(theta)
        i+=1
        if gradient==0:
            print('gradient is zero')`

1 个答案:

答案 0 :(得分:0)

  

我确定我的代码仅适用于1维,但似乎根本不起作用。

其原因必须是无条件的return gradient,theta, p(theta),它总是在第一次迭代中退出。也许您宁愿在此写print(…),在函数末尾写return …