ValueError:fmin_l_bfgs_b中值过多无法解包

-1 投票
2 回答
1063 浏览
提问于 2025-04-17 17:39

我有一段代码,用来运行xfoil这个程序,以获取气动翼的最佳重量值。

def four_dim_opt(x0, weight_limits, cl, file_path, xfoil_path):
opt_out = fmin_l_bfgs_b(run_xfoil_wcl, x0, args = (cl, file_path, xfoil_path), bounds =    weight_limits, epsilon = 0.01, approx_grad = True)
return opt_out

其中,run_xfoil_wcl是一个函数,它返回的是阻力系数的值(浮点数)。

我一直遇到的错误是:

Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
four_dim_opt(x0, weight_limits, 1.2, file_path, xfoil_path)
File "H:/appliedlab4 - Copy(2).py", line 157, in four_dim_opt
opt_out = fmin_l_bfgs_b(run_xfoil_wcl, x0, args = (cl, file_path, xfoil_path), bounds =     weight_limits, epsilon = 0.01, approx_grad = True)
File "C:\Python27\lib\site-packages\scipy\optimize\lbfgsb.py", line 166, in fmin_l_bfgs_b
l,u = bounds[i]
ValueError: too many values to unpack

2 个回答

1

你在调用四维优化函数四维优化函数时,传给它的weight_limits是什么?这个weight_limits的值会被传给bounds,然后在你错误信息中的那一行被使用:

l,u = bounds[i]

这意味着weight_limits应该是一个列表或者元组,而且列表里的每一项也应该是一个列表或元组(里面要正好有两个值)。

1

在使用 scipy.optimize.fmin_l_bfgs_b 这个函数时,weight_limits 这个参数引发了错误。这个参数应该是 None,或者是一个包含两个元素的列表:

weight_limits - 这是一个 (最小值, 最大值) 的组合,用来为 x 中的每个元素设定范围。如果某个方向没有限制,可以把最小值或最大值设为 None。

撰写回答