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 )

`

Другие вопросы по тегам