Минимизация нелинейных функций C++

Я пытался перенести код с MATLAB на C++ и наткнулся на очень неожиданную трудность. Кажется, я не могу найти эквивалент С++ для fminunc MATLAB.

Проще говоря, определение задачи заключается в минимизации f(x) для вектора x, скалярной функции f(x) и начального предположения x_0.

Мои поисковые усилия до сих пор выявили только библиотеку под названием MinPack, которая не подходит для случая, когда f(x) — скаляр, а x — вектор.

Наверняка язык программирования, старый как мир, имеет в свободном доступе реализацию классических численных рецептов нелинейной оптимизации? Или я слишком оптимистичен? Даже базовые подходы, такие как градиентный спуск, были бы огромным улучшением...


person Uri Merhav    schedule 03.02.2014    source источник
comment
Можно рассматривать все еще процветающий рынок Matlab и ему подобных как свидетельство того, что вы действительно чрезмерно оптимистичны в своих ожиданиях, как свидетельство того, что можно заработать на написании программ, для которых нет общепризнанных бесплатных программ с открытым исходным кодом. общедоступны. И, в более легком смысле, C++ стар как мир — очень забавное замечание.   -  person High Performance Mark    schedule 03.02.2014
comment
Бог @HighPerformanceMark сказал: photon_t letThereBeLight() { return light; }   -  person Shai    schedule 03.02.2014
comment
В свою защиту я был саркастичен, называя C++ старым как мир, но он просто немного старше меня, и это должно что-то значить.   -  person Uri Merhav    schedule 03.02.2014
comment
time_t letThereBeCode = 0 - это скорее оценка возраста C, а не C++.   -  person MSalters    schedule 03.02.2014
comment
Для полноты картины скажу, что в итоге я использовал Purple, который оказался весьма полезным: cimne. ком/фиолетовый   -  person Uri Merhav    schedule 03.03.2014


Ответы (3)


Проверьте NLopt. Это то, что я использую в первую очередь при переносе материалов с MATLAB на C/C++, и это работает очень хорошо.

person jmbr    schedule 03.02.2014

Я бы выбрал IPOPT, нелинейный решатель общего назначения. Он знает гораздо больше, чем вы просили.

Другие варианты будут включать:

Последнее, к сожалению, потребует взаимодействия с FORTRAN; это болезненно и скучно, но на самом деле это не ракетостроение.

person Ali    schedule 03.02.2014

Вот еще один хороший: GSL, в частности http://www.gnu.org/software/gsl/manual/gsl-ref_36.html#SEC498

person alexandre iolov    schedule 13.02.2014