Как реализовать пакет выпуклой оптимизации?

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

Спасибо!


person anon    schedule 08.07.2010    source источник


Ответы (3)


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

person Samik R    schedule 08.07.2010

Есть соответствующая статья в Optima, информационный бюллетень общества математической оптимизации под названием «Быстрая разработка решателя Minlp с открытым исходным кодом с помощью COIN-OR». В нем описывается создание нелинейного решателя с использованием некоторых пакетов coin-or. Большая часть монет или вещей написана на C++.

Для Python вы можете рассмотреть возможность использования структуры данных и алгоритмов линейной алгебры, доступных в numpy. В родственном пакете scipy есть несколько нелинейных оптимизаторов, но ничего особенного для выпуклых оптимизация.

И, наконец, вы можете взглянуть на выпуклый оптимизатор на основе python cvxopt, чтобы понять, какую задачу вы выполняете. есть впереди вас.

person David Nehme    schedule 24.09.2011

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

Я реализовал решатели для нескольких задач, сводящихся к выпуклой оптимизации (http://cs229.stanford.edu/proj2017/) - cvx4ml, который работает быстрее, чем аналогичное решение от SkLearn, и я сдал 24-часовой экзамен Стивену Бойду, поэтому я могу дать совет, что вы можете сделать, и описать для вашего очень грубого плана:

Итак, вы собираетесь создать свой пакет, я напишу пошаговую инструкцию:

  1. Вы должны создать библиотеку для работы с плотными матрицами/векторами
  2. Вы должны создать библиотеку для работы с разреженными матрицами/векторами
  3. Реализуйте около 20 различных алгоритмов для решения системы линейных уравнений (потому что в зависимости от ситуации вам понадобятся разные из них)
  4. Внедрите понятия, как описывать ограничения, функциональную область и т. д. на вашем языке программирования или в созданной вами системе.
  5. Реализовать несколько норм и оценку двойных норм, некоторые методы факторизации, такие как LU, Cholesky.
  6. Реализуйте пользовательский простой конический решатель для неотрицательного ортонтального конуса. И это зависит от того, что вы собираетесь делать. 6.a - написать решатель на основе метода внутренних точек. 6.b - написать решатель с поддержкой распределенной оптимизации 6.c - написать решатель на основе некоторого метода проецируемых субградиентов.

  7. Улучшите его для поддержки других конусов

  8. Улучшен ваш решатель с шагом "5"

И если вы хотите быть на уровне CVXPY, то

  1. Реализовать синтаксический анализ описания программы, как это делает CVXPY, и преобразовать задачу в коническую форму.

p.s. Если вы чувствуете себя небрежно в некоторых из этих тем, то:

  • Прочтите книгу по линейной алгебре, которую написал проф. из твоего университета

  • Посмотрите в ютубе EE263 с С.Бойдом, EE364A с С.Бойдом, EE364B с С.Бойдом.

person bruziuz    schedule 12.02.2018