Python 如何在PyGPGO中使用数组?
我正在通过这个软件包研究贝叶斯优化,它在引擎盖下使用PyMC3,将高斯过程拟合到底层函数,并提出运动以最大化回报 到目前为止,用标量值定义函数似乎非常容易,特别是在参数有限的情况下。但是,我不确定是否有办法提供向量/数组参数Python 如何在PyGPGO中使用数组?,python,optimization,bayesian,pymc3,gaussian-process,Python,Optimization,Bayesian,Pymc3,Gaussian Process,我正在通过这个软件包研究贝叶斯优化,它在引擎盖下使用PyMC3,将高斯过程拟合到底层函数,并提出运动以最大化回报 到目前为止,用标量值定义函数似乎非常容易,特别是在参数有限的情况下。但是,我不确定是否有办法提供向量/数组参数 from pyGPGO.covfunc import squaredExponential from pyGPGO.acquisition import Acquisition from pyGPGO.surrogates.GaussianProcess import Ga
from pyGPGO.covfunc import squaredExponential
from pyGPGO.acquisition import Acquisition
from pyGPGO.surrogates.GaussianProcess import GaussianProcess
from pyGPGO.GPGO import GPGO
def f(x):
return (np.sin(x))
sexp = squaredExponential()
gp = GaussianProcess(sexp)
acq = Acquisition(mode='ExpectedImprovement')
param = {'x': ('cont', [0, 2 * np.pi])}
np.random.seed(23)
gpgo = GPGO(gp, acq, f, param)
gpgo.run(max_iter=20)
我想要的东西大致如下:
#变量:类型、范围
param={'x':(np.array(3,10),[0,2*np.pi]))
如果这是不可能的,我可能会以{x1:…,x2:…,}
的形式设置多个变量,然后通过函数定义本身相应地访问它们,尽管当参数空间较大时,这似乎是次优的
编辑:这是我的方法,它不起作用
将numpy导入为np
从pyGPGO.covfunc导入squaredExponential
从pyGPGO.acquisition导入acquisition
从pyGPGO.surrogates.GaussianProcess导入GaussianProcess
从pyGPGO.GPGO导入GPGO
param={f'x_{i}':('cont',[0,1])表示范围(3)内的i
范围(3)内i的参数更新({f'y{i}):('cont',[0,1]))
def f(p):
v1=np.数组([p[f'x{i}']表示范围(3)中的i)
v2=np.数组([p[f'y{i}']表示范围(3)中的i)
返回np.点(v1,v2)
sexp=squaredeponential()
gp=高斯过程(sexp)
acq=采集(模式='ExpectedImprovement')
np.随机种子(23)
gpgo=gpgo(总成、空气品质、f、参数)
gpgo.run(最大iter=20)
错误是:
评估建议点当前评估。最佳评估。
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
26 np.随机种子(23)
27 gpgo=gpgo(总成、空气品质、f、参数)
--->28 gpgo.运行(最大iter=20)
1帧
/usr/local/lib/python3.7/dist-packages/pyGPGO/GPGO.py in_firstRun(self,n_eval)
86 s_参数值=列表(s_参数值())
87 self.X[i]=s_参数
--->88 self.y[i]=self.f(**s_参数)
89自装配总成(自X、自y)
90 self.tau=np.max(self.y)
TypeError:f()获得意外的关键字参数“x_1”
因此,似乎将参数包装到字典中比我预期的要复杂一些,因为对象param
中的参数必须由函数f
显式调用,而不是作为字典p
接收
以前有人解决过这个问题吗