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

2 番目の問題を最初の問題として再定義できます。次元の数を 2 倍にし、をそれ自体の上に積み重ねることを要求するnew_xことによってです。old_x

new_x = [old_x]
        [old_x]

の適切な形式を見つけることで、上記の条件を強制できると思いますAh1次に、とh2不等式の両方を にエンコードして、スタックするようにnew_G * new_x <= new_h設定し、対角線上に連続した s とそれに続く連続した sを持つ対角行列にします。new_hh1h2new_Gn1n-1

とにかく、上記は非常に不器用です。私の問題の次元が2倍になり、うまくいかないかもしれません。

CVXOPT の 2 番目の問題をより適切に表現する方法はありますか?

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 に答える