为什么scipy.optimize.minimize找不到最小值?

时间:2019-10-28 21:51:57

标签: python scikit-learn scipy-optimize

我正在寻找在给定参数dim的情况下,对于哪个(x)最小的函数。
这是功能:

def func(x, dim):
    return np.abs(np.abs(np.mean(np.sqrt(np.sum(np.diff(
        np.random.rand(100000,dim,2)/x, axis=2)**2, axis=1))))
        - 1/3)

这是它的外观:

for xx in np.arange(1,5,0.1):
    plt.scatter(xx, func(xx,2), color='blue')

enter image description here

但是当我尝试找到应该在1.5左右的x值时,结果非常接近我的x0猜测(这里是1.0)。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize


params = minimize(func, x0=1, args=(2))

我也尝试了不同的求解器,但无法将其最小化。

1 个答案:

答案 0 :(得分:1)

您的功能需要确定性才能发挥最大作用。因此,您需要删除对np.random.rand的呼叫。一种解决方案是在开始时生成一次随机数,并在整个最小化过程中对其进行修正。