Ограниченная оптимизация с использованием библиотек scipy - PullRequest
1 голос
/ 09 мая 2019

Предположим, что функция логарифмического правдоподобия f(x, y, z) = prob(k0)* log((1-x)^(1-y)) + prob(k1)*log((1-x)^(1-z)) и существуют ограничения, такие, что возможные значения x, y и z должны лежать между 0 и 1. Цель состоит в том, чтобы минимизировать функцию и вернуть значения для x, y и zв этих минимумах.

Я попытался использовать библиотеку scipy для метода сопряженных градиентов.

   params = sp.optimize.minimize(fun=f, x0=initial_params, args=(data,), method='CG',
                                     jac=df,options={'gtol': 1e-05,'disp': True})

Метод не выполняется в первой итерации.

Warning: Desired error not necessarily achieved due to precision loss.

Нужно ли предоставлять матрицу Гессе, так как существует более двух переменных?

Я также пробовал метод Нелдера-Мида, но он отнимает много времени.

params = sp.optimize.minimize(fun=f, x0=initial_params, method='Nelder-Mead', args=(data,),  options={'disp': True})

Также, что более важно, метод не учитывает границы переменных и в некоторых случаях возвращает значения x, y и z, не имеющие границ.У

s есть какие-то другие методы в scipy или любом другом пакете, который рассматривает такой тип ограниченной оптимизации.Пожалуйста, помогите.

1 Ответ

1 голос
/ 09 мая 2019

Согласно документации scipy.optimize.minimize (ищите параметр "bounds"), границы поддерживаются только методами L-BFGS-B, TNC, SLSQP и trust-constr. L-BFGS-B, вероятно, должен быть вашим первым выбором, он обычно работает очень хорошо для большинства проблем.

...