Python 如何在PyGPGO中使用数组?

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

我正在通过这个软件包研究贝叶斯优化,它在引擎盖下使用PyMC3,将高斯过程拟合到底层函数,并提出运动以最大化回报

到目前为止,用标量值定义函数似乎非常容易,特别是在参数有限的情况下。但是,我不确定是否有办法提供向量/数组参数

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
接收

以前有人解决过这个问题吗