Python Optimize.fmin在性能良好的连续函数上找不到最小值
我试图找到以下函数的最小值: 这是电话:Python Optimize.fmin在性能良好的连续函数上找不到最小值,python,scipy,Python,Scipy,我试图找到以下函数的最小值: 这是电话: >>> optimize.fmin(residualLambdaMinimize, 0.01, args=(u, returnsMax, Param, residualLambdaExtended), disp=False, full_output=True, xtol=0.00001, ftol = 0.0001) Out[19]: (array([ 0.0104]),
>>> optimize.fmin(residualLambdaMinimize, 0.01, args=(u, returnsMax, Param, residualLambdaExtended),
disp=False, full_output=True, xtol=0.00001, ftol = 0.0001)
Out[19]: (array([ 0.0104]), 0.49331109755304359, 10, 23, 0)
>>> residualLambdaMinimize(0.015, u, returnsMax, Param, residualLambdaExtended)
Out[22]: 0.46358005517761958
>>> residualLambdaMinimize(0.016, u, returnsMax, Param, residualLambdaExtended)
Out[23]: 0.42610470795409616
正如你所看到的,直接邻域中有一些点产生较小的值。我的解决方案为什么不考虑它们? 这是一个可以帮助你调试情况的建议。 如果你加上
data.append((x,result))
到residualLambdaMinimize
,您可以收集优化的所有点。fmin
正在评估residuambdaminimize
:
data = []
def residualLambdaMinimize(x, u, returnsMax, Param, residualLambdaExtended):
result = ...
data.append((x, result))
return result
如果您发布数据
,我们可能会更好地理解fmin
在做什么(并可能重现问题),而无需我们了解剩余最小值
是如何定义的
此外,您还可以可视化fmin试图找到最小值时所采用的“路径”:
import numpy as np
import scipy.optimize as optimize
import matplotlib.pyplot as plt
data = []
def residualLambdaMinimize(x, u, returnsMax, Param, residualLambdaExtended):
result = (x-0.025)**2
data.append((x, result))
return result
u, returnsMax, Param, residualLambdaExtended = range(4)
retval = optimize.fmin(
residualLambdaMinimize, 0.01,
args=(u, returnsMax, Param, residualLambdaExtended),
disp=False, full_output=True, xtol=0.00001, ftol = 0.0001)
data = np.squeeze(data)
x, y = data.T
plt.plot(x, y)
plt.show()
你能给剩余的最小值表达吗?它也通常在这种洞里,最小化是很棘手的,像一个球在两个狭窄的墙之间反弹,到达底部却没有真正到达。最小化算法应该被相应地选择。@ColonelBeauvel我会在这里添加它,如果有一个快速的方法找到一个小的工作样本的话。不幸的是,这是几个层次的函数逻辑。所有的解算器都有它们的优点和缺点。毕竟,有这么多是有原因的。但是,很少有人会在不考虑他们做什么以及你的功能如何影响他们尝试做什么的情况下完美地运行。有时,像重新缩放x轴这样的简单操作会起作用。有时,在很远的地方选择一个初始猜测,但在“好”的方向(对于解算器)会有所帮助。最终,找到一个“最佳”解算器/系统组合是一门黑色艺术。