-1

我有以下代码正在运行以运行 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 是一个函数返回阻力值的系数 (float)。

我不断收到的错误是:

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
4

2 回答 2

1

scipy.optimize.fmin_l_bfgs_bweight_limits参数导致错误,它应该是一个或包含两个元素的列表:None

weight_limits - x 中每个元素的 (min, max) 对,定义该参数的界限。当该方向没有界限时,将 None 用于 min 或 max 之一。

于 2013-03-02T04:02:24.110 回答
1

您将什么传递给four_dim_opt 作为您的weight_limits?weight_limits 的值被传递给 bounds,然后在错误消息中的行中访问:

l,u = bounds[i]

这意味着 weight_limits 应该是一个列表或元组,并且列表中的每个项目也应该是一个列表或元组(恰好包含两个值)。

于 2013-03-02T04:06:18.723 回答