【问题标题】:Why does scipy.optimize.minimize not find the minimum?为什么 scipy.optimize.minimize 找不到最小值?
【发布时间】:2020-02-24 04:30:19
【问题描述】:

在给定参数 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))

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

【问题讨论】:

    标签: python scikit-learn scipy-optimize


    【解决方案1】:

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

    【讨论】:

    • 我虽然通过 np.mean 对大量案例进行平均会减少这种影响。
    • 话虽如此,在函数中添加 np.random.seed(42) 解决了它
    猜你喜欢
    • 2016-09-10
    • 2020-09-18
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2013-01-27
    • 2019-07-25
    • 2020-08-17
    相关资源
    最近更新 更多