Квадратичное программирование Python с CVXOPT

Я ищу исчерпывающее руководство по формулированию задачи квадратичного программирования CVXOPT с квадратичными ограничениями. Здесь представлены хорошие документы:

Постановка проблемы, с которой я имею дело, идентична проблеме здесь:

введите здесь описание изображения

Как должна выглядеть матрица G? Я сформулировал как систему линейных уравнений, но, глядя на примеры, это не кажется правильным?

Лучший ресурс, который я нашел, это https://courses.csail.mit.edu/6.867/wiki/images/a/a7/Qp-cvxopt.pdf, но ссылки в конце недоступны для дальнейшего чтения.

У меня есть блокнот ipython, который пытается использовать этот метод программирования, но он постоянно терпит неудачу: https://gist.github.com/jaredvacanti/62010beda0ccfc20d2eac3c900858e50

Изменить: я отредактировал файл источника данных в записной книжке, чтобы предоставить доступ к реальным данным, используемым в этой задаче оптимизации.


person Jared    schedule 25.04.2017    source источник
comment
Первая ссылка говорит вам, как должна выглядеть G. В чем именно проблема? Также: если у вас нет опыта работы с cvxopt и вам не нужен вариант индивидуального решения (одно из преимуществ cvxopt), то используйте cvxpy, который гораздо проще в использовании (подход высокого уровня).   -  person sascha    schedule 26.04.2017
comment
Когда я задаю P, q, A и b решателю, я получаю оптимальное решение, похожее на выборочные данные, к которым я пытаюсь подогнать сплайн, но когда я задаю G и h, я получаю ерунду/неоптимальность решение. В связи с этим я считаю, что что-то не так с формулировкой G и h.   -  person Jared    schedule 26.04.2017


Ответы (1)


В записной книжке, которую вы разместили, кажется, все это выяснено. У меня была проблема в том, что исходный файл для данных недоступен.

Теперь к вашему вопросу:

Как должна выглядеть матрица G? Я сформулировал как систему линейных уравнений, но, глядя на примеры, это не кажется правильным?

Перепишите ваши «линейные уравнения» в матричный вид, т.е.

2x + 2y = 4
x  - y  = 1

эквивалентно

matrix([[2,2],[1,-1]]) * matrix([[x],[y]])  = matrix([[4],[1]])

где matrix от cvxopt.

person matusko    schedule 25.04.2017
comment
Я обновил записную книжку, чтобы включить данные, чтобы пример мог работать точно. При запуске решателя, если предоставлены только P, q, A и B, решение подходит. При предоставлении также G и h решатель не завершает работу. Это моя проблема - это должна быть формулировка G и h. - person Jared; 26.04.2017