我猜
scipy.optimize.minimize
无法使用二维边界。
我可以通过以下方式解决此问题:
-
将输入重塑为
minimize
-
在目标函数中将阵列重塑为二维。
但这很乏味。
我做错什么了吗?或
减少
在我的例子中,变量应该都在0和1之间。
谢谢
doc
对于1.1.0版,说明边界可以是数组:
scipy.optimize.Bounds
lb,ub:类似阵列,可选
每个数组必须具有
与x大小相同或可以是标量
,在这种情况下,将使用边界
所有变量都是相同的。
...
测验
import numpy as np
import scipy
import scipy.optimize as opt
def obj(x):
return x.sum()
def main():
x = np.ones((3, 4))
bounds = opt.Bounds(np.zeros(x.shape),
np.ones(x.shape))
r = opt.minimize(obj, x, bounds=bounds)
print(r)
main()
Traceback (most recent call last):
File "scipy_bounds.py", line 16, in <module>
main()
File "scipy_bounds.py", line 12, in main
r = opt.minimize(obj, x, bounds=bounds)
File "<...>/site-packages/scipy/optimize/_minimize.py", line 584, in minimize
bounds = new_bounds_to_old(bounds.lb, bounds.ub, x0.shape[0])
File "<...>/site-packages/scipy/optimize/_constraints.py", line 259, in new_bounds_to_old
lb = [x if x > -np.inf else None for x in lb]
File "<...>/site-packages/scipy/optimize/_constraints.py", line 259, in <listcomp>
lb = [x if x > -np.inf else None for x in lb]
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我发现
减少
我明白了
'length of x0 != length of bounds'
.