【问题标题】:R optimization with fixed sum of parameters具有固定参数和的 R 优化
【发布时间】:2013-04-08 19:17:56
【问题描述】:

我想优化一个函数,参数总和设置为 1 这里有函数

varxyz<-function(param){
a<-param[1]
b<-param[2]
c<-param[3]
a^2*matcov[1,1]+b^2*matcov[2,2]+c^2*matcov[3,3]+2*a*b*matcov[1,2]+2*a*c*matcov[1,3]+2*b*c*matcov[2,3]   
}  


parammv <- optim(c(0.3,0.3,0.4),varxyz,method="L-BFGS-B",lower=c(0.1,0.1,0.1))

其中 matcov 是协方差矩阵

如何将三个参数的总和设置为 1? 谢谢解答

【问题讨论】:

  • ?optim 开始吧,也许吧。
  • 只优化2个参数,第三个固定为c = 1 - (a + b)
  • 您正在寻找constrOptim,请查看uici 参数。有关详细信息,请参阅?constrOptim
  • @Jilber ConstrOptim ?但是如何设置约束=1?也许通过给 2 个约束 >= 1 和
  • @baptiste 我也是这么想的,但是你如何指定 c 的下限?

标签: r optimization parameters sum fixed


【解决方案1】:

由于是二次优化问题,可以使用quadprog

# Sample data
n <- 3
matcov <- var(matrix(rnorm(2*n^2),2*n,n))

library(quadprog)
solve.QP(matcov, rep(0,n), matrix(1,nc=1,nr=n), 1, meq=1)

# With lower- and upper-bound constraints:
solve.QP(
  matcov, rep(0,n), 
  cbind( 
    rep(1,n),  # Equality constraint
    diag(n),   # Lower bound constraint
    -diag(n)   # Upper bound constraint
  ),
  c(
    1,         # Equality constraint RHS
    rep(.1,n), # Lower bound
    rep(-1,n)  # - Upper bound
  ),
  meq = 1      # The first constraint is an equality
)

【讨论】:

    【解决方案2】:

    试试这个

    proj <- function(x) x / sum(x)
    
    varxyz <- function(param) {
       param <- proj(param)
       ... rest of function as it is now ...
    }
    

    执行优化后,将proj 应用于optim 的解决方案以获得答案。

    您可能还想查看 BB 包中的 spg 函数,因为它本机支持投影。

    【讨论】:

      【解决方案3】:

      使用@baptiste 的建议并通过ifelsec (0.1) 施加最小值:

      matcov <- var(matrix(rnorm(12),4,3))
      varxyz<-function(param){
       a<-param[1]
       b<-param[2]
       c<-1-(a+b)
       ifelse(c >= 0.1,a^2*matcov[1,1]+b^2*matcov[2,2]+c^2*matcov[3,3]+2*a*b*matcov[1,2]+2*a*c*matcov[1,3]+2*b*c*matcov[2,3],-Inf)
      }  
      
      
      parammv <- optim(c(0.3,0.3),varxyz,method="L-BFGS-B",lower=c(0.1,0.1))
      

      【讨论】:

      • Error in optim(c(0.3, 0.3), varxyz, method = "L-BFGS-B", lower = c(0.1, : L-BFGS-B needs finite values of 'fn'
      猜你喜欢
      • 1970-01-01
      • 2019-01-13
      • 2012-05-28
      • 1970-01-01
      • 2013-07-11
      • 2017-02-21
      • 2021-12-11
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多