Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的SPSA(同步扰动随机逼近优化器)实现有什么问题?_Python_Optimization_Stochastic - Fatal编程技术网

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

Python 我的SPSA(同步扰动随机逼近优化器)实现有什么问题?,python,optimization,stochastic,Python,Optimization,Stochastic,下面是我为多项式x^4-x^2实现SPSA优化的尝试。我将代码重新格式化,只对一维有效,但它似乎根本不起作用。我还认识到,SPSA通常在您没有想要最小化的函数时使用;它来自于包含噪音的测量,比如机器人运动。可能是我没有正确使用np.random.binomial吗?我使用这个网站的伪代码来尝试并实现它。对不起,我不习惯使用代码阻塞。请随时提出其他建议,我可以如何改进它。谢谢你抽出时间 import numpy as np def SPSA(α、γ、低α、A、c、迭代次数、θ): dimens

下面是我为多项式x^4-x^2实现SPSA优化的尝试。我将代码重新格式化,只对一维有效,但它似乎根本不起作用。我还认识到,SPSA通常在您没有想要最小化的函数时使用;它来自于包含噪音的测量,比如机器人运动。可能是我没有正确使用np.random.binomial吗?我使用这个网站的伪代码来尝试并实现它。对不起,我不习惯使用代码阻塞。请随时提出其他建议,我可以如何改进它。谢谢你抽出时间

import numpy as np 
def SPSA(α、γ、低α、A、c、迭代次数、θ):

dimension=len(θ)

ppar=[1,0,-1,0,0]
p=np.poly1d(ppar)
#声明向量函数量
梯度=np.零(尺寸)
增量=np.零(尺寸)
delta=np.随机二项(3.4,维数)
如果增量==0:
打印('错误增量')
其他:
打印('这是我们的增量')
打印(增量)
#变量迭代时的简单循环实现
i=0
而我
我将代码重新格式化,只对一维有效,但它似乎根本不起作用

原因必须是无条件的
返回梯度θ,p(θ)
,它总是在第一次迭代中存在。也许您更希望在此处编写
print(…)
,并在函数末尾返回…

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')`