R中的二次规划

时间:2017-04-25 18:39:35

标签: r optimization quadratic-programming

我已经在R中查看了一些不同的优化方法来解决我的优化解决方案,但似乎所有的算法都不适用于我的问题。我有以下问题:

    m=n-1 #length option sample (...)
n=5
Dmat <- matrix(0,nrow=n-1,ncol=n+1)
Dmat[row(Dmat)==col(Dmat)]<-1
Dmat[row(Dmat)+1==col(Dmat)]<--2
Dmat[row(Dmat)+2==col(Dmat)]<-1
#for(j in 0:n){
#  para<-c(par[j])#Try to have n+1 Parameters(original formula from 0:N)
#}
Amat=matrix(NA,ncol=n+1,nrow=m)

for(u in 1:m){
  for(k in 1:(n+1)){
    Amat[u,k]=pmax(S[k]-K[u],0)
  }
}
para>=0
sum(para)==1
S_0=exp((-r+q)*TTM)*sum(para*S)

objfunc=sum(para*Dmat)^2+alpha*exp(-r*TTM)*(rowsum(Amat*para)-V)

我还有一个使用optim的方法,但是这个使用了Matrix表单。我的问题是如何使用这种优化,因为他们的算法通常优化公式如quandprog可能无法正常工作。我应该研究不同的方法吗?

谢谢你的建议!

编辑:

这是我迄今为止尝试的新代码:

objcfunc<-function(P){#build the central minimization function
n=12
r=0.03
V=test[,"Price"]
alpha=0.001  
S=S 
K=test[,"strike"]  
TTM=test[,"TTM"]

m=n-1
Dmat <- matrix(0,nrow=n-1,ncol=n+1)
Dmat[row(Dmat)==col(Dmat)]<-1
Dmat[row(Dmat)+1==col(Dmat)]<--2
Dmat[row(Dmat)+2==col(Dmat)]<-1


Amat=matrix(NA,ncol=n+1,nrow=m) # build the matrix for model option prices
for(u in 1:m){
  for(k in 1:(n+1)){
    Amat[u,k]=pmax(S[k]-K[u],0)
  }
}

y=(Dmat %*% P)^2+alpha*exp(-r*TTM)*((Amat %*% P)-V)^2

return(sum(y))
}


constr<-function(P){
  S0=test[,"Settle"]
  r=0.03
  q=0
  TTM=test[,"TTM"]
  S=S
  f=NULL
  f1=rbind(f,S0-exp(-(r-q)*TTM)*sum(P*S))
  f2=rbind(f,sum(P)-1)
  return(c(f1,f2))
}
n=12
#NlcOptim(X=rep(0,n+1),objfun=objcfunc,confun=constr,lb=rep(0,n+1))#try to get rid from this rbind solution
library(Rsolnp)

solnp(pars=rep(0,n+1),objcfunc,constr,LB=rep(0,n+1))

问题是我在conf $ c中得到错误错误:$ operator对原子向量无效。

是因为NlcOptim使用$来调用任何东西吗?

我提供了我在这里使用的简短样本数据:

    Date strike Price Settle  TTM  Average Moneyness   implvola deltaM
 2009-09-15   70.0  1.64  70.93 0.12 60.76036      1.01 0.09625975   0.01
 2009-09-15   70.5  1.32  70.93 0.12 60.76036      1.01 0.09656526   0.01
 2009-09-15   71.0  1.04  70.93 0.12 60.76036      1.00 0.09677672   0.00
 2009-09-15   71.5  0.81  70.93 0.12 60.76036      0.99 0.09784297   0.01
 2009-09-15   72.0  0.62  70.93 0.12 60.76036      0.99 0.09890358   0.01
 2009-09-15   72.5  0.46  70.93 0.12 60.76036      0.98 0.09918868   0.02
 2009-09-15   73.0  0.33  70.93 0.12 60.76036      0.97 0.09897400   0.03
 2009-09-15   73.5  0.24  70.93 0.12 60.76036      0.97 0.10025021   0.03
 2009-09-15   74.0  0.16  70.93 0.12 60.76036      0.96 0.09923239   0.04
 2009-09-15   74.5  0.11  70.93 0.12 60.76036      0.95 0.09998572   0.05
 2009-09-15   75.0  0.07  70.93 0.12 60.76036      0.95 0.09938658   0.05

示例位于Dataframe测试中。问题贯穿了solnp,所以我将编辑上面的公式。

0 个答案:

没有答案