Почему scipy.optimize.minimize не находит минимума? - PullRequest
0 голосов
/ 29 октября 2019

Я ищу, для которого (x) следующая функция является минимальной, учитывая параметр dim.
Это функция:

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

Но когда я пытаюсь найти значение 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))

Я также пробовал разные решатели, но не могу свести его к минимуму.

1 Ответ

1 голос
/ 29 октября 2019

Ваша функция должна быть детерминированной, чтобы минимизация работала. Поэтому вам нужно убрать ваш звонок на np.random.rand. Однажды можно было бы сгенерировать эти случайные числа один раз в начале и исправить их на протяжении всей минимизации.

...