2014-06-06 17 views
8

Tôi cố gắng để sử dụng solve.QP để giải quyết một vấn đề tối ưu hóa danh mục đầu tư (vấn đề bậc hai)r - Portfolio Tối ưu hóa - solve.QP - Hạn chế là không nhất quán

Tổng cộng 3 tài sản

Có 4 chế:

  1. tổng trọng lượng tương đương với 1
  2. danh mục đầu tư dự kiến ​​lợi nhuận tương đương với 5,2%
  3. mỗi trọng lượng tài sản lớn hơn 0
  4. mỗi cân tài sản nhỏ hơn .5

Dmat là ma trận hiệp phương sai

Dmat <- matrix(c(356.25808, 12.31581, 261.8830, 212.31581, 27.24840, 18.50515, 261.88302, 18.50515,535.45960), nrow=3, ncol=3) 

dvec là lợi nhuận kỳ vọng của mỗi tài sản

dvec <- matrix(c(9.33, 3.33, 9.07), nrow=3, ncol=1) 

Amat là ma trận hạn chế

A.Equality <- matrix(c(1,1,1), ncol=1) 
Amat <- cbind(A.Equality, dvec, diag(3), -diag(3)) 

chế A^T b> = b_0, vector b

bvec <- c(1, 5.2, rep(0, 3), rep(-0.5, 3)) 

meq = 2, vì có hai khó khăn bình đẳng, hạn chế đầu tiên và thứ hai là bình đẳng

Sau đó, tôi chạy solve.QP chức năng

library(quadprog) 
qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=2) 

Nhưng nó mang lại cho các lỗi

Error in solve.QP(Dmat, dvec, Amat, bvec, meq = 2) : constraints are inconsistent, no solution! 

tôi không chắc chắn nơi tôi đã làm sai.

Trả lời

9

Có hai vấn đề với mã bạn được đăng:

  • Các posted Dmat là không thực sự đối xứng; bạn đã vô tình bao gồm giá trị 212.31581 thay vì 12.31581
  • Tùy chọn meq=2 có nghĩa là hai hạn chế đầu tiên của bạn được giữ ở mức bình đẳng, có nghĩa là tổng trọng số của bạn là 1 và lợi nhuận của bạn chính xác là 5,2%. Ràng buộc thứ hai rõ ràng là một ràng buộc gây ra sự thiếu khả năng; có vẻ như không có danh mục đầu tư hợp lệ nào được trả lại chính xác bằng 5,2% cho các ràng buộc khác của bạn. Thật vậy, vì không quá một nửa danh mục đầu tư có thể trả lại 3,33% và phần còn lại phải có ít nhất 9,07%, lợi nhuận phải từ 6,2% trở lên. Do đó, bạn nên thư giãn điều này thành> = ràng buộc bằng cách đặt meq=1.

Dưới đây là đoạn code làm việc:

library(quadprog) 
Dmat <- matrix(c(356.25808, 12.31581, 261.88302, 12.31581, 27.24840, 18.50515, 261.88302, 18.50515,535.45960), nrow=3, ncol=3) 
dvec <- matrix(c(9.33, 3.33, 9.07), nrow=3, ncol=1) 
A.Equality <- matrix(c(1,1,1), ncol=1) 
Amat <- cbind(A.Equality, dvec, diag(3), -diag(3)) 
bvec <- c(1, 5.2, rep(0, 3), rep(-0.5, 3)) 
qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=1) 
qp$solution 
# [1] 0.3808733 0.5000000 0.1191267 

Giải pháp tối ưu là thực sự gắn liền với lợi nhuận 6,3%.