为什么 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
的调用。解决方案可能是在开始时生成一次这些随机数,并在整个最小化过程中修复它们。
我正在寻找在给定参数 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
的调用。解决方案可能是在开始时生成一次这些随机数,并在整个最小化过程中修复它们。