Python scipy.optimize_scalar()给出;UnboundLocalError:局部变量';fu';作业前参考“;
我正在解决一些消费者的问题,优化一些选择。我正在尝试使用scipy中的optimize.minimize_scalar()函数,但出现错误:Python scipy.optimize_scalar()给出;UnboundLocalError:局部变量';fu';作业前参考“;,python,scipy,Python,Scipy,我正在解决一些消费者的问题,优化一些选择。我正在尝试使用scipy中的optimize.minimize_scalar()函数,但出现错误: Traceback (most recent call last): File "/Users/User/Documents/GitHub/dynamic_programming/model_our_paper.py", line 238, in <module> sol_C, sol_V = model.solve() Fil
Traceback (most recent call last):
File "/Users/User/Documents/GitHub/dynamic_programming/model_our_paper.py", line 238, in <module>
sol_C, sol_V = model.solve()
File "/Users/User/Documents/GitHub/dynamic_programming/model_our_paper.py", line 69, in solve
obj_func, bounds=[0, k], method='bounded'
File "/Users/User/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/_minimize.py", line 790, in minimize_scalar
return _minimize_scalar_bounded(fun, bounds, args, **options)
File "/Users/User/opt/anaconda3/lib/python3.7/site-packages/scipy/optimize/optimize.py", line 1880, in _minimize_scalar_bounded
if np.isnan(xf) or np.isnan(fx) or np.isnan(fu):
UnboundLocalError: local variable 'fu' referenced before assignment
我尝试了以下方法,效果很好:
from scipy import optimize
f = lambda x: (x - 2)*x*(x - 1)**2
k = 10
res = optimize.minimize_scalar(f, bounds=[0, k], method='bounded')
print(res.x)
我使用的是更新版MacOS的Macbook。尝试更新Scipy,并重新安装了我从Anaconda获得的python版本。感谢@rpoleski和@WarrenWeckesser帮助我解决了这个问题。这似乎是边界相等时发生的错误,事实就是如此。这个bug似乎有更新,但它似乎仍在开发中 所以我的工作就是在上限上加一点。有趣的是,这不起作用:
result = optimize.minimize_scalar(
obj_func, bounds=[0, k+1.0e-5], method='bounded'
)
但是这个起作用了:
result = optimize.minimize_scalar(
obj_func, bounds=[0, k+1.0e-4], method='bounded'
)
我建议:1)打印
t,L,k_I,k
,看看哪些有效,哪些产生了问题;2) 尝试扩展5行代码,使其产生错误;3) 打印所有V_guess
值以查看问题何时发生。@rpoleski这是一些很好的建议!我会的!WarrenWeckesser啊,好吧,是的,因为当我试图看它时,它似乎与函数本身有关。我会检查是否有可能下载开发版本?
result = optimize.minimize_scalar(
obj_func, bounds=[0, k+1.0e-4], method='bounded'
)