繁体   English   中英

Optimize.fmin 在表现良好的连续函数上找不到最小值

[英]Optimize.fmin does not find minimum on well-behaved continuous function

我试图找到以下函数的最小值:

功能

这是电话:

>>> 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 ,您可以收集optimize.fmin评估residualLambdaMinimize所有点:

data = []
def residualLambdaMinimize(x, u, returnsMax, Param, residualLambdaExtended):
    result = ...
    data.append((x, result))
    return result

然后,如果您发布data而我们不必确切了解residualLambdaMinimize是如何定义的,那么我们可能能够更好地了解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()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM