R语言的solve.QP函数

我在使用R语言的solve.QP函数时,我的代码是

rm(list=ls())
getwd()
library(data.table)
library(tidyverse)
library(quadprog)
SP500 <- c(0.4381,-0.083,-0.2512,-0.4384,-0.0864,0.4998,-0.0119,0.4674,0.3194,-0.3534,0.2928,
           -0.011,-0.1067,-0.1277,0.1917,0.2506,0.1903,0.3582,-0.0843,0.052,0.057,0.183,0.3081,0.2368,
           0.1815,-0.0121,0.5256,0.326,0.0744,-0.1046,0.4372,0.1206,0.0034,0.2664,-0.0881,0.2261,0.1642,
           0.124,-0.0997,0.238,0.1081,-0.0824,0.0356,0.1422,0.1876,-0.1431,-0.259,0.370,0.2383,-0.0698,
           0.0651,0.1852,0.3174,-0.047,0.2042,0.2234,0.0615,0.3124,0.1849,0.0581,0.1654,0.3148,-0.0306,
           0.3023,0.0749,0.0997,0.0133,0.372,0.2382,0.3186,0.2834,0.2089,-0.0903,-0.1185,-0.2197,0.2836,
           0.1074,0.0483,0.1561,0.0548,-0.3658,0.2592,0.148600)
BONDS <- c(0.0084,0.042,0.0454,-0.0256,0.0879,0.0186,0.0796,0.0447,0.0502,0.0138,0.0421,0.0441,
           0.054,-0.0202,0.0229,0.0249,0.0258,0.038,0.0313,0.0092,0.0195,0.0466,0.0043,-0.003,0.0227,
           0.0414,0.0329,-0.0134,-0.0226,0.068,-0.021,-0.0265,0.1164,0.0206,0.0569,0.0168,0.0373,0.0072,
           0.0291,-0.0158,0.0327,-0.0501,0.1675,0.0979,0.0282,0.0366,0.0199,0.0361,0.1598,0.0129,-0.0078,
           0.0067,-0.0299,0.082,0.3281,0.032,0.1373,0.2571,0.2428,-0.0496,0.0822,0.1769,0.0624,0.150,
           0.0936,0.1421,-0.0804,0.2348,0.0143,0.0994,0.1492,-0.0825,0.1666,0.0557,0.1512,0.0038,0.0449,
           0.0287,0.0196,0.1021,0.201,-0.1112,0.084600)

GOLD <- c(0.000000000,0.000000000,0.000000000,0.000000000,0.000000000,0.447002860,0.079661828,
          0.000000000,0.000000000,0.000000000,0.000000000,0.000000000,-0.014388737,0.028573372,0.000000000,
          0.027779564,-0.006872879,0.027212564,0.026491615,0.117056555,-0.023530497,-0.036367644,
          -0.006191970,-0.006230550,-0.033039854,-0.086306904,-0.007067167,-0.002840911,0.001421464,
          0.001419447,0.000000000,0.000000000,0.034846731,-0.027779564,-0.004234304,-0.002832863,
          0.002832863,0.004234304,-0.002820876,0.002820876,0.203228242,-0.059188871,-0.052577816,
          0.136739608,0.358646094,0.511577221,0.545727802,-0.132280611,-0.253090628,0.168898536,
          0.265477915,0.464157559,0.689884535,-0.285505793,-0.201637346,0.120144312,-0.163629424,
          -0.127202258,0.149181164,0.192236014,-0.020385757,-0.134512586,0.005221944,-0.058998341,
          -0.051002554,0.045462374,0.064538521,0.002600782,0.010336009,-0.155436854,-0.121167134,
          -0.052185753,0.000000000,-0.028987537,0.133990846,0.157360955,0.119003292,0.084161792,
          0.308209839,0.142551544,0.220855221,0.110501915,0.228258652)
CPI <- c(-0.0115607,0.005848,-0.0639535,-0.0931677,-0.1027397,0.0076336,0.0151515,0.0298507,
         0.0144928,0.0285714,-0.0277778,0.0000,0.0071429,0.0992908,0.0903226,0.0295858,0.0229885,
         0.0224719,0.1813187,0.0883721,0.0299145,-0.0207469,0.059322,0.0600,0.0075472,0.0074906,
         -0.0074349,0.0037453,0.0298507,0.0289855,0.0176056,0.017301,0.0136054,0.0067114,0.0133333,
         0.0164474,0.0097087,0.0192308,0.0345912,0.0303951,0.0471976,0.0619718,0.0557029,0.0326633,
         0.0340633,0.0870588,0.1233766,0.0693642,0.0486486,0.0670103,0.0901771,0.1329394,0.125163,
         0.0892236,0.0382979,0.0379098,0.0394867,0.0379867,0.010979,0.0443439,0.0441941,0.046473,
         0.0610626,0.0306428,0.0290065,0.0274841,0.026749,0.0253841,0.0332248,0.017024,0.016119,
         0.0268456,0.0338681,0.0155172,0.0237691,0.0187949,0.0325556,0.0341566,0.0254065,0.0408127,
         0.0009141,0.0272133,0.0149572)
BILLS <- c(0.0308,0.0316,0.0455,0.0231,0.0107,0.0096,0.0032,0.0018,0.0017,0.003,0.0008,0.0004,
           0.0003,0.0008,0.0034,0.0038,0.0038,0.0038,0.0038,0.0057,0.0102,0.011,0.0117,0.0148,0.0167,
           0.0189,0.0096,0.0166,0.0256,0.0323,0.0178,0.0326,0.0305,0.0227,0.0278,0.0311,0.0351,0.039,
           0.0484,0.0433,0.0526,0.0656,0.0669,0.0454,0.0395,0.0673,0.0778,0.0599,0.0497,0.0513,0.0693,
           0.0994,0.1122,0.143,0.1101,0.0845,0.0961,0.0749,0.0604,0.0572,0.0645,0.0811,0.0755,0.0561,
           0.0341,0.0298,0.0399,0.0552,0.0502,0.0505,0.0473,0.0451,0.0576,0.0367,0.0166,0.0103,0.0123,
           0.0301,0.0468,0.0464,0.0159,0.0014,0.001300)
R<-data.frame(stocks=SP500,bonds=BONDS,gold=GOLD)
R<-data.frame(stocks=SP500-CPI,bonds=BONDS-CPI,gold=GOLD-CPI)
#计算均值方差标准差
mean_vec<-apply(R, 2,mean);
cov_mat<-cov(R);
sd_vec<-sqrt(diag(cov_mat));

A<-cbind(rep(1,3),mean_vec,diag(1,nrow = 3)); #合成矩阵
Mu<-seq(.01,.16,length=600)  #600个目标预测投资组合回报

sd<-Mu  #标准差
w<-matrix(0,nrow = 600,ncol = 3); #权重
 for (i in 1:length(Mu)){
   B<-c(1,Mu[i],rep(0,3))  #约束条件
   result=
     solve.QP(Dmat = 2*cov_mat,dvec = rep(0,3),
              Amat =A,bvec =B,meq=2)
   if (any(result$solution >=0.5)) {
     w[i,] <- result$solution
     sd[i]=sqrt(result$value)
   }
 }    
w <- w[rowSums(w != 0) > 0, ]

plot(sd,Mu,tpye="l",xlin=c(0,0.5),
     ylim=c(0,.20),lty=3,
     ylab="Expected Return",
     xlab="Risk (Standard Deviation)")
mufree=1.3/100
points(0,mufree,cex=4,pch="*")

sharpe=(Mu-mufree)/sd
ind=(sharpe==max(sharpe))
options(digits = 3)
w[ind,]
lines(c(0,2),mufree+c(0,2)*(Mu[ind]-mufree)/sd[ind],lwd=4,lty=2)
points(sd[ind],Mu[ind],cex=4,pch=15)
ind2=(sd==min(sd))
points(sd[ind2],Mu[ind2],cex=4,pch="+")

ind3=(Mu>Mu[ind2])
lines(sd[ind3],Mu[ind3],type="l",xlim=c(0,.5),
      ylim=c(0,.2),lwd=4)

text(sd_vec[1],mean_vec[1],"Stock",cex=1.5)
text(sd_vec[2],mean_vec[2],"Bond",cex=1.5)
text(sd_vec[3],mean_vec[3],"Gold",cex=1.5)

w[ind,]


结果显示constraints are inconsistent, no solution!
请问我的代码哪里有问题

1.在第2行,您定义了变量x,但是没有对其进行约束。这意味着x可以取任何值,包括不符合其他约束条件的值。您应该添加一个约束条件来限制变量x的范围。

2.在第4行,您定义了变量y,并使用了x的值来约束y。然而,x的值尚未定义。如果您在这之前添加一个约束条件来定义x的值,则可以解决这个问题。

3.在第5行,您约束了变量y的范围为大于等于5。然而,在第7行中,您约束了y的范围为小于等于3。这两个约束条件是矛盾的,因此无法找到符合所有约束条件的解。您需要重新考虑约束条件的设置,以确保它们是一致的。

要检查约束条件是否正确设置,以确保它们不会相互矛盾。此外,还需要添加一些额外的约束条件来确保能够找到符合所有约束条件的解。