R 如何在嵌套优化中返回解决方案?

R 如何在嵌套优化中返回解决方案?,r,optimization,R,Optimization,我有以下问题:我必须解决多维优化问题。然而,从某种意义上说,这个问题是很好的:我可以将问题分为外部优化和内部优化,从而降低维度。内部优化可以非常有效地解决(线性代数)。代码有点长。出于这个原因,我创建了一个玩具模型 out.obj <- function(x,storage){ inner.sol <- inner.obj(param = x) storage <- append(storage,inner.sol) return((x-inner.sol)^2)

我有以下问题:我必须解决多维优化问题。然而,从某种意义上说,这个问题是很好的:我可以将问题分为外部优化和内部优化,从而降低维度。内部优化可以非常有效地解决(线性代数)。代码有点长。出于这个原因,我创建了一个玩具模型

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)

out.obj谢谢你的回答。对于玩具模型来说,它确实非常有效。然而,对于复杂的一个没有。原因:以上所有代码都是函数f2,它本身在函数f1中被调用。所以在控制台中我调用f1(),它调用f2(包含上面的代码)。如何调整它?很多thx,我真的很感激!我添加了玩具模型的更新版本。很抱歉给您带来不便。已添加对答案的响应。
    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)
}
storage <<- append(storage,inner.sol)
assign("storage", append(storage, inner.sol), .GlobalEnv))
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)
}
 e$storage <- append(e$storage, inner.sol)