C++: NLopt COBYLA по сравнению с Matlab fmincon

Я использую NLopt library, COBYLA algorithmв C++ для минимизации функции затрат на основе журнала. Я уже реализовал то же самое, используя fmincom в Matlab. Функция Matlab работает намного лучше, чем NLopt, Это требует гораздо меньшего количества оптимизаций, чем NLopt, а также сходится к минимальному значению, намного лучше, чем NLopt.

Я считаю, что дополнительные параметры, используемые для алгоритмов, различны. Я попытался скопировать те же параметры для NLopt, что и для значения по умолчанию в fmincon в Matlab, и он все еще не дает аналогичных результатов.

Мне нужно знать, как сходиться таким же образом, как Matlab, если это возможно, используя COBYLA в NLopt. заранее спасибо

1 ответ

Почему КОБИЛА? fmincon это больше похоже на NLopt L-BFGS, см. также LBFGS. Они используют оценки градиента, поэтому сходятся гораздо быстрее, чем линейные приближения COBYLA, когда функция func() → квадратичная.
Я бы предложил

  • распечатать / построить все значения функций для обоих оптимизаторов (распечатать внутри вашей функции)
  • опубликовать все варианты для обоих; КОБИЛА очень чувствительна к робегу и ренду
  • попробуйте NLopt L-BFGS или NLopt BOBYQA, "итеративно построенное квадратичное приближение" .


Добавлено: использует fmincom

"Конечные различия, используемые для оценки градиентов, являются либо" прямыми "(по умолчанию), либо" центральными " ..."

автоматически. Вы можете запустить L-BFGS или любой оптимизатор градиента с оценщиком градиента, таким как односторонние или центральные различия. В целом, это может быть плохой оценкой для шумных функций или вблизи границ;
но это работает для вас в fmincom, поэтому должно работать и в NLopt L-BFGS.
Попробуйте сначала, прежде чем тратить время на совершенно разные методы.

Вы хотите установить эти параметры NLopt:
initial_step например, 1 или. 1
ftol_abs а также xtol_abs например, 1е-4, не меньше, чем нужно
(для COBYLA, initial_step → rhobegin и initial_step масштабируются x xtol_abs → rhoend.)

NB распечатать коды возврата из любого оптимизатора: почему он остановился?

Другие вопросы по тегам