r-如何在嵌套优化中返回解决方案



我有以下问题:我必须解决多个维度的优化问题。然而,这个问题在某种意义上是好的:我可以将问题分为外部优化和内部优化,从而降低维度。内部优化可以非常有效地求解(线性代数)。代码有些冗长。为此,我制作了一个玩具模型。

out.obj <- function(x,storage){
  inner.sol <- inner.obj(param = x)
  storage <- append(storage,inner.sol)
  return((x-inner.sol)^2)
}
inner.obj <- function(x = NULL,param){
  return(log(param)^2-param)
}
storage <- c()
sol <- optim(par = c(3),fn = out.obj,storage = storage)

从数学的角度来看,这个例子没有多大意义。然而,它显示了我关于提取内部解决方案的问题。在上面的代码中,我们有一个2dim问题,x1,x2。正如你所看到的,我把optim称为外部目标函数。给定x1的值,我们可以"求解"x2。

最后,我想得到x1和x2的两个最优值。为此,我使用了参数存储。但是存储得到了一个本地版本,我无法检索x2的最佳值。我还尝试了以下内容:

    storage <- c()
    out.obj <- function(x){
      inner.sol <- inner.obj(param = x)
      storage <- append(storage,inner.sol)
      return((x-inner.sol)^2)
    }
    inner.obj <- function(x = NULL,param){
      return(log(param)^2-param)
    }
    sol <- optim(par = c(3),fn = out.obj)
In this case storage should be globally defined. Still the values for x2 are not getting populated. How can I get this value?

**EDIT**
f2 <- function(y=NULL){
  storage <- c()
sol <- optim(par = c(3),fn = out.obj)
return(list("sol" = sol,"storage"=storage))
}
f1 <- function(p=NULL){
  temp <- f2(NULL)
  return(temp)
}
out.obj <- function(x){
  inner.sol <- inner.obj(param = x)
  storage <<- append(storage,inner.sol)
  return((x-inner.sol)^2)
}
inner.obj <- function(x = NULL,param){
  return(log(param)^2-param)
}

使用<lt;-

storage <<- append(storage,inner.sol)

assign:

assign("storage", append(storage, inner.sol), .GlobalEnv))

关于storage不在全局环境中的修改问题,将storage所在的环境传递给out.obj,如图所示:

f2 <- function(y=NULL){
  storage <- c()
  sol <- optim(par = c(3),fn = out.obj, e = environment())
  return(list("sol" = sol,"storage"=storage))
}
out.obj <- function(x, e){
  inner.sol <- inner.obj(param = x)
  assign("storage", append(e$storage, inner.sol), e)
  return((x-inner.sol)^2)
}

assign行也可以写成:

 e$storage <- append(e$storage, inner.sol)

相关内容

最新更新