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

Why does scipy.optimize.minimize not find the minimum?

我正在寻找在给定参数 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')

但是当我试图找到应该在 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))

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

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