重现步骤
import nevergrad as ngimport numpy as nploc = ng.p.Scalar(lower=-5,upper=5)scale = ng.p.Scalar(lower=0, upper=5)s = ng.p.Scalar(lower=0, upper=10)k = ng.p.Choice(list(range(2,6)))w = ng.p.Array(shape=(self.times.shape[0],)).set_bounds(-10,10)instru = ng.p.Instrumentation(loc=loc, scale = scale, s=s, k=k, w = w)optimizer = ng.optimizers.DE(parametrization=instru, budget=budget)optimizer.suggest((),{'k':3,'loc':-2,'s':2,'scale':2,'w':np.ones(self.times.shape[0])})
观察结果
ValueError: 元组值必须是大小为0的元组,得到的是:((), {'k': 3, 'loc': -2, 's': 2, 'scale': 2, 'w': array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])}).当前值:()
预期结果
在优化器运行中设置初始值
有没有人成功使用过Nevergrad中的suggest
方法?
如果有的话,你介意复制/粘贴工作代码吗?我尝试了文档中示例的不同形式,但似乎无法使其工作。
回答:
这个问题在一个相关的Github讨论串中得到了解答:
基本上,
suggest
的调用方式应该与要优化的函数相同,在你的情况下,由于你使用的是Instrumentation,我猜应该是这样的:optimizer.suggest(k=3, loc=-2, s=2, scale=2, w=mp.ones(self.times.shape[0]))
另一个选项,适用于除Choice参数之外的所有情况,可以使用Array和Scalar的init选项(例如:
loc = ng.p.Scalar(init=-2, lower=-5, upper=5))