7

cvxopt ソルバー qp を使用してラグランジュ乗数を計算したいのですが、「正確に」どのように機能するのか疑問に思っています。もっと情報を見つけようとしましたが、cvxopt に関する情報はあまりありません。この問題の例を見ていましたが、これらの変数が何を意味し、どのように解決策を導き出すのかわかりません。

例は次のとおりです。

ここに画像の説明を入力

を使用して解決できます

Q = 2*matrix([ [2, .5], [.5, 1] ])
p = matrix([1.0, 1.0])
G = matrix([[-1.0,0.0],[0.0,-1.0]])
h = matrix([0.0,0.0])
A = matrix([1.0, 1.0], (1,2))
b = matrix(1.0)
sol=solvers.qp(Q, p, G, h, A, b)
print(sol['x'])
4

2 に答える 2

2

完全なセットアップがどのように機能するかはまだわかりませんが、基本的なセットアップは次のようなものです。ドキュメントのこの例を使用しています。

  • c は最小化したい関数で、2x1 + x2 =[2,1]
  • b (別名 h) は、制約の右側の値です。
  • A (別名 G) は、拘束方程式の係数です。

制約式は

  • -x1 + x2 <= 1
  • x1 + x2 >= 2
  • x2 >= 0
  • x1-2x2 <= 4

>= であるすべての制約は-1、<= になるように乗算する必要があります。

だからb=[1,-2,0,4] そして

A = [ 
  [-1.0, -1.0, 0.0, 1.0], #x1
  [1.0, -1.0, -1.0, -2.0] #x2
]

で解決

>>> from cvxopt import matrix, solvers
#wrap our arrays in the `matrix` function
>>> sol=solvers.lp(c,A,b)
>>> print(sol['x'])
[ 5.00e-01]
[ 1.50e+00]
于 2018-07-15T04:08:13.490 に答える