Python 为什么scipy.optimize.minimize没有找到最小值?

Python 为什么scipy.optimize.minimize没有找到最小值?,python,scikit-learn,scipy-optimize,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,

我想找出给定一个参数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')
但是当我试图找到x值,它应该在1.5左右,结果非常接近我的x0猜测,大约在1.0左右

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


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

我还尝试了不同的解算器,但无法使其最小化

您的函数需要是确定性的,以便最小化工作。因此,您需要删除对np.random.rand的调用。Once解决方案可以是在开始时生成一次这些随机数,并在整个最小化过程中固定它们。

I尽管通过np.mean对大量情况进行平均会减少这种影响。话虽如此,在函数中添加np.random.seed42解决了这一问题