【问题标题】:CVXOPT quadratic programming interfaceCVXOPT 二次编程接口
【发布时间】:2014-12-09 10:23:20
【问题描述】:

为 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 找到合适的表格来强制执行上述条件。然后,我可以将new_h 设置为h1 堆叠在h2new_G 上,将h1h2 不等式编码为new_G * new_x &lt;= new_h,使其成为n 连续@987654336 的对角矩阵@s 后跟 n 在对角线上连续的 -1s。

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

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

【问题讨论】:

    标签: python convex-optimization cvxopt quadratic-programming


    【解决方案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 )
    

    `

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 2016-04-14
      • 2011-02-08
      • 2011-01-03
      • 2015-07-04
      相关资源
      最近更新 更多