-1

rを使用して、ポートフォリオ最適化クラスの2次計画問題を解決しようとしています。私の答えを本の答えと比較したいと思います。
ここに問題があります: min: t(c)%*%x + .5*t(x)%*%BigC%*%x
st: -x <=0, i=1...5
and: sum(x)=1

これが私のコードです:

A = matrix( c( 1,1,1,1,1, -1,0,0,0,0, 0,-1,0,0,0, 0,0,-1,0,0, 0,0,0,-1,0, 0,0,0,0,-1), ncol=5, byrow=T)
b = matrix( c( 1,0,0,0,0,0), ncol=1)
c = matrix( c( 1,-2,3,-4,5), ncol=1)
BigC = matrix( c( 1,0,0,0,0,  0,2,0,0,0,  0,0,3,0,0,  0,0,0,4,0,  0,0,0,0,5), ncol=5, byrow=T)
x0 = matrix( c( 0.2,0.2,0.2,0.2,0.2), ncol=1)
n = 5
m = 5
q = 1
solve.QP( Dmat=BigC, dvec=t(c), Amat=t(A), bvec=t(b), meq=1)

ただし、次のエラーがスローされます。

Error in solve.QP(Dmat = BigC, dvec = t(c), Amat = t(A), bvec = t(b),  : 
  constraints are inconsistent, no solution!

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

3

ドキュメントは?solve.QP言及しています

制約 A^T b >= b_0 を持つ形式 min(-d^T b + 1/2 b^TD b) の問題。

したがって、少なくとも2つのことが間違っています。

  • あなたの制約Aを表現するためのサインx_i >= 0
  • dvecする必要があります-t(c)

それも挙げておこう

  • quadprog今後は、パッケージを使用していることに言及することが重要です。
  • solve.QPベクトルを取るので、行列を作成して転置する必要はありません。
  • cR では一般的な関数の名前であるため、変数に名前を付けることは避けてください。
  • あなたのコードの一部は使用されていないため、質問とは無関係です。
  • 便利diagな機能。

これらすべてを考慮に入れると、これはあなたが探しているものです:

library(quadprog)

A    <- rbind(rep(1, 5), diag(5))
b    <- c( 1,0,0,0,0,0)
tc   <- c( 1,-2,3,-4,5)
BigC <- diag(1:5)

solve.QP(Dmat = BigC, dvec = -tc, Amat = t(A), bvec = b, meq = 1)
于 2012-12-04T20:30:51.597 に答える