Проблемы сходимости минимизации SciPy для целевой функции с малыми значениями и числовыми производнымиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы сходимости минимизации SciPy для целевой функции с малыми значениями и числовыми производными

Сообщение Anonymous »

У меня возникли проблемы с минимизацией с помощью SciPy целевой функции, возвращающей небольшое значение, а также проблемы, в которой я хотел бы использовать числовые производные в алгоритме на основе градиента. Это проблема, связанная с оптимальными размерами выборки, из учебника Кокрана «Методы выборки» 1977 года. Мой минимальный рабочий пример выглядит следующим образом:

Код: Выделить всё

import numpy as np
import math
from scipy.optimize import minimize

#parameters
n_strata=4
strata_size = [0.25, 0.25, 0.25, 0.25]
strata_variance = [0.25, 0.25, 0.25, 0.25]
total_sample = 8000

#parameter to control the scale of the objective function
scale_value = 1.0

#objective function that the variance of a stratified estimator
def objective_function(n_vec_in_short):

#convert from numpy to a list
if isinstance(n_vec_in_short,np.ndarray):
n_vec_in_short_list= n_vec_in_short.tolist()
else:
n_vec_in_short_list = n_vec_in_short

#get the sample size of the last stratum
n_last_stratum = total_sample - sum( n_vec_in_short_list)

#now create the vector that is of lenght n_strata
n_vec = n_vec_in_short_list
n_vec.append(n_last_stratum)

variance_total=0.0

#get the sum of variance across strata
for h in range(0,n_strata):
variance_total = variance_total + (strata_size[h]**2)*strata_variance[h]/n_vec[h]

return variance_total*scale_value

solution = minimize(objective_function, [2500,2500,2500] , method='BFGS' )
print(solution)

true_optimum = objective_function([2000,2000,2000])
print(true_optimum)

Моя проблема заключается в том, что если я установлю значение масштаба для целевой функции равным 1,0, она вернет только начальное предположение [2500,2500,2500]. Однако, если я изменю значение масштаба на 100000,0, я получу оптимальное решение.
Я знаю, как это исправить для минимального рабочего примера. Но что касается реальной проблемы, над которой я работаю, я был бы признателен за помощь в лучшем понимании SciPy, чтобы понять, как лучше всего устанавливать параметры для алгоритмов, использующих числовые производные, чтобы лучше избегать подобных проблем сходимости.
Попробовали специальные решения, которые сработали, но нужна помощь сообщества, чтобы понять, свести к лучшему, чтобы иметь менее специальное решение


Подробнее здесь: https://stackoverflow.com/questions/788 ... all-values
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»