在 optim 中限制参数等级

Restrict parameter ranks in optim

是否可以使用 optim(par = init) 优化一个函数,但参数向量总是按递增顺序进行限制?例如,允许 c(1,2,8) 但不允许 c(1,2,0)

您必须在优化函数中包含此条件:

如果你要最大化的函数是:

fn<-function(x,y,z){

  -x^2-(1+y)^2-(z-y)^2

}

您需要将其更改为:

fn<-function(x,y,z){
   if(x<y&&y<z){
      return(-x^2-(1+y)^2-(z-y)^2)
   }
   else{
      return(-Inf)
    }

}

现在可以优化这个功能了。

您可以使用可以处理线性约束的constrOptim()

constrOptim(theta=c(..), f=.., grad=NULL, 
   ui=matrix(c(-1,1,0, 0,-1,1), 2, byrow=TRUE), ci=c(0, 0))