SLSQP错误:边界的长度与X0的长度不兼容



嗨,我正在与Python和DifFev2上的SLSQP求解器一起工作,这是Mystic软件包的一部分。

对于多个参数,如下所示的格式工作:

bnds = ((0, 1e3), (0, 1e-4))
optimize.minimize(Error, [1e-8, 1e-7], args=(E, Bt, L, dt, TotT, nz, Co, Exmatrix), method = 'SLSQP', bounds = bnds)

我只想优化一个参数,那就是当我遇到错误时:slsqp错误:边界的长度与x0的长度不兼容。我使用下面显示的语法:

bnds = ((1e-9, 1e-2))
optimize.minimize(Error, [1e-8], args=(U, E, Bt, L, dt, TotT, nz, Co, Exmatrix), method = 'SLSQP', bounds = bnds)

我不确定怎么了,因为我在BNDS变量中只有一个元组对,一个猜测,不确定是什么问题。

直接从python的文档:

只需要创建一个元组(又称单例(才需要尾逗号;在所有其他情况下,它都是可选的。没有尾随逗号的单个表达不会产生元组,而是产生该表达式的价值。(要创建一个空元组,请使用一个空括号:((。

工作替代方案:

bnds = ((1e-9, 1e-2),)
bnds = [(1e-9, 1e-2)]

在内部发生:

bnds = ((1e-9, 1e-2))
np.array(bnds, float).shape
# (2,)
bnds = ((1e-9, 1e-2),)
np.array(bnds, float).shape
# (1, 2)
# and then N is compared to the size of the first dimension (2 vs. 1)

(并确保您有理由不使用minimize_scalar(

最新更新