Реализация функции fmincon Matlab на C++

В настоящее время мы используем функцию Matlab fmincon для нелинейной оптимизации проекта, над которым я работаю. Нам нужно перенести эту часть проекта на C++, чтобы интегрировать ее с другими частями проекта. Есть ли хороший способ скомпилировать функцию fmincon в библиотеку, которую можно использовать в C++? Или где-нибудь уже есть библиотека, реализующая fmincon?

Если ни один из вышеперечисленных вариантов не подходит, какие библиотеки оптимизации доступны, на которые было бы довольно легко переключиться с fmincon?

Справочная информация:

Мы пытаемся оптимизировать траекторию полета БПЛА по путевой точке, чтобы как можно точнее следовать заданной траектории камеры путевой точки вдоль земли. Путевые точки между двумя путями совпадают во времени, поэтому подвес камеры будет направлен на i-ю путевую точку камеры, когда БПЛА прибудет в i-ю путевую точку траектории полета. Все сегменты траектории полета будут одинаковой длины, поскольку БПЛА летит с постоянной скоростью. Радиус поворота также ограничивается верхней границей. На траекторию движения камеры ограничений нет, поэтому ее сегменты могут быть длиннее или короче, чем сегменты траектории полета, и она может иметь крутые повороты. Функция стоимости представляет собой квадрат суммы расстояний между соответствующими путевыми точками полета и путевыми точками камеры (без учета разницы высот).


person Brandon    schedule 25.03.2011    source источник
comment
В случае, если вы не получили хороших ответов, вы можете захотеть погуглить fmincon в С++, там безумное количество совпадений!   -  person stefan    schedule 26.03.2011
comment
Если кому интересно, мы остановились на использовании библиотеки NLopt от Массачусетского технологического института.   -  person Brandon    schedule 09.06.2011
comment
@ Брэндон, какой из оптимизаторов в NLopt вы пробовали / какой лучше всего подходит для вашей проблемы?   -  person denis    schedule 27.07.2012
comment
@Denis Похоже, я пробовал COBYLA, но мы так и не заработали на C ++. Парень, который работал над кодом Matlab, не имел большого опыта работы с C++, и части перенесенного кода давали сбой. Я пытался помочь ему портировать часть оптимизации, и я думаю, что у нас тоже были некоторые проблемы с крахом NLopt. Я не уверен, было ли это из-за неверных входных данных из других частей кода или из-за того, что я как-то неправильно его использовал. В итоге мы перетасовывали данные между моим кодом на C++ и его кодом на Matlab с помощью файлов. Было бы лучше интегрировать его, но для нашего исследования этого вполне хватило.   -  person Brandon    schedule 28.07.2012
comment
Наше финансирование и сам проект заканчивались слишком рано, чтобы у нас было время отладить перенесенный код C++, поэтому мы просто сосредоточились на подготовке нашего демо, используя то, что у нас уже работало.   -  person Brandon    schedule 28.07.2012
comment
Хорошо, спасибо @Brandon (передний край, когда ты истекаешь кровью)   -  person denis    schedule 28.07.2012


Ответы (1)


Большую часть времени библиотеки не будут пытаться стать волшебным «черным ящиком», универсальным инструментом оптимизации, как это делает fmincon, — вместо этого они потребуют от вас более подробной информации и самостоятельного выбора, для них проще и должно привести к тому, что ваше программное обеспечение будет работать быстрее. Вы, безусловно, можете использовать MATLAB Engine или MATLAB Compiler для вызова fmincon из вашей программы, но, скорее всего, ваше программное обеспечение будет работать намного быстрее (и вы можете не покупать компилятор MATLAB), если вы можете использовать немного больше знаний о структуре вашей программы. Задача оптимизации имеет и вызовите соответствующий алгоритм.

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

страница Википедии, посвященная оптимизации, содержит ссылки на списки программного обеспечения для оптимизации. определенные виды задач оптимизации (например, можете ли вы сформулировать свою задачу как квадратичное программирование с линейными ограничениями?) и программное обеспечение, подходящее для каждой ситуации.

книга Бойда по выпуклой оптимизации, а также связанные с ней материалы курса и видео — действительно хорошие ресурсы.

person Prodicus    schedule 26.03.2011