1

Предоставленные QP решатель CVXOPT решает задачи вида (см http://cvxopt.org/userguide/coneprog.html#quadratic-programming):CVXOPT интерфейс квадратичного программирования

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 быть диагональная матрица с последовательными n1 с последующим 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) 

`