я использую NLopt library
, COBYLA algorithm
в C ++ для минимизации функции затрат на основе журнала. Я уже реализовал то же самое, используя fmincom
в Matlab.
Функция Matlab работает намного лучше, чем NLopt
, Это требует гораздо меньшего количества оптимизаций, чем NLopt, а также сходится к минимальному значению, намного лучше, чем NLopt.
Я считаю, что дополнительные параметры, используемые для алгоритмов, различны. Я попытался скопировать те же параметры для NLopt, что и для по умолчанию в fmincon в Matlab, и он все еще не дает аналогичных результатов.
Мне нужно знать, как сходиться таким же образом, как Matlab, если это возможно, используя COBYLA в NLopt.
заранее спасибо
Почему КОБИЛА?
fmincon
афаик больше похож
NLopt L-BFGS,
смотрите также LBFGS.
Они используют оценки градиента,
поэтому сходятся намного быстрее, чем линейные приближения COBYLA, когда func () → квадратичный.
Я бы предложил
Добавлено:
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 распечатать коды возврата из любого оптимизатора: Зачем это остановилось?
Других решений пока нет …