CVXOPT интерфейс для квадратичного программирования
Предоставленный решатель QP для CVXOPT решает проблемы формы (см. http://cvxopt.org/userguide/coneprog.html):
Minimize
(1/2)*x.t*P*x + q.T*x
Subject to
G*x <= h
A*x = b
Это работает нормально, но становится немного неловко, когда нужно решить проблему с помощью неравенства с двух сторон:
Minimize
(1/2)*x.t*P*x + q.T*x
Subject to
G1*x <= h1
G2*x >= h2
A*x = b
Я могу переопределить вторую проблему как первую, удвоив число измерений и потребовав new_x
быть old_x
укладывается поверх себя:
new_x = [old_x]
[old_x]
Я думаю, что могу выполнить вышеуказанное условие, найдя соответствующую форму для A
, Затем я могу закодировать как h1
а также h2
неравенства в new_G * new_x <= new_h
установив new_h
быть h1
сложены на h2
а также new_G
быть диагональной матрицей с n
последовательный 1
с последующим n
последовательный -1
на диагонали.
В любом случае, вышесказанное очень неуклюже, оно удваивает размерность моей проблемы и может даже не сработать.
Есть ли лучший способ выразить вторую проблему в CVXOPT?
1 ответ
Minimize
(1/2)*x.T*P*x + q.T*x
Subject to
new_G * x <= new_h
A * x = b
где
new_G = [G1;-G2],
new_h = [h1;-h2].
(G1 - matrix m1*n, G2 - matrix m2*n, new_G - matrix (m1 + m2)*n)
new_G = numpy.concatenate( ( G1, -G2 ), axis = 0 )
new_h = numpy.concatenate( ( h1, -h2 ), axis = 1 )
`