我正在使用scipy.optimize.minimize
运行优化sig_init = 2
b_init = np.array([0.2,0.01,0.5,-0.02])
params_init = np.array([b_init, sig_init])
mle_args = (y,x)
results = opt.minimize(crit, params_init, args=(mle_args))
问题是,我需要在sig_init
上设置一个界限。但是opt.minimize()
要求我为每个输入参数指定边界。但我的一个输入是一个numpy数组。
如果我的一个输入是一个numpy数组,我如何指定界限?
答案 0 :(得分:0)
首先,scipy.optimize.minimize需要一个平面数组作为它的第二个参数x0(documentation)(这意味着它优化的函数也需要一个平面数组和可选的附加参数)。因此,我理解你必须给它类似的东西:
b_init = [0.2,0.01,0.5,-0.02]
sig_init = [2]
params_init = np.array(b_init + sig_init])
让优化工作。 然后,如果你必须给出数组中每个标量的边界。一个基本的例子,如果你想在sig上设置[-1,1]并且不想要b上的边界:
bounds = [(-np.inf, np.inf) for _ in b_init] + [(-1, 1)]