Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x SLSQP错误:边界的长度与x0的长度不兼容_Python 3.x_Numpy_Scipy_Minimization - Fatal编程技术网

Python 3.x SLSQP错误:边界的长度与x0的长度不兼容

Python 3.x SLSQP错误:边界的长度与x0的长度不兼容,python-3.x,numpy,scipy,minimization,Python 3.x,Numpy,Scipy,Minimization,您好,我正在使用python上的SLSQP解算器和mystic软件包中的diffev2 对于多个参数,以下格式适用: 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 error:边界的长度与x0的长度

您好,我正在使用python上的SLSQP解算器和mystic软件包中的diffev2

对于多个参数,以下格式适用:

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 error:边界的长度与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)

(请确保您有理由不使用
最小化标量

谢谢,这对SLSQP有效,但对于mystic软件包中的Differencev2解算器,它似乎将参数作为序列,并在我的代码中产生一个错误,即:不能将序列乘以“float”类型的非整数。非整数是另一个值为0.5的参数,与优化参数相乘。我没有想到
minimize_scalar
,因为我刚刚将SLSQP用于多变量,最近才将变量减少到一个。但这与上面的问题无关。如果答案解决了这个问题,请将其标记为这样,如果您遇到了新问题,请详细询问新问题!(并正确地标记它;这里您错过了与此相关的scipy示例)
不能将序列与“float”类型的非int相乘。
通常类似于:您使用了列表,其中numpy.array(正如
[0,1,2]*0.2
不适用于列表,而它适用于numpy)。谢谢您,这对SLSQP很有效。我还将尝试
最小化标量
函数。我在其他一些工作中一直在尝试Differv2全局解算器,当我尝试这种语法时,出于某种原因,它似乎将我的参数作为序列来读取。我们将进一步调查,也许会发表另一条评论。