在 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))
是否可以使用 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))