1

为 CVXOPT 提供的 QP 求解器解决了以下形式的问题(参见http://cvxopt.org/userguide/coneprog.html#quadratic-programming):

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_hh1堆叠h2new_G成为对角矩阵,其中n连续1s 后跟对角线上的n连续-1s。

无论如何,以上内容非常笨拙,它使我的问题的维度增加了一倍,甚至可能不起作用。

是否有更好的方式来表达 CVXOPT 中的第二个问题?

4

1 回答 1

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 )

`

于 2015-04-26T18:13:12.743 回答