0
我有以下問題:我有在多個維度來解決優化問題。然而,這個問題在某種意義上是不錯的:我可以在外部和內部優化中分解問題,從而減少維度。內部優化可以非常有效地解決(線性代數)。代碼有點冗長。出於這個原因,我創建了一個玩具模型。如何在嵌套優化中返回解決方案?
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)
}
謝謝您的回答。它對玩具模型完美地工作。然而,對於複雜的一個沒有。原因:以上所有代碼都是函數f2,它本身在函數f1中被調用。所以在控制檯中我調用了f1(),它調用f2(包含上面的代碼)。如何適應這個?很多thx,我真的很感激它! – math
我添加了玩具模型的更新版本。抱歉給你帶來不便。 – math
已添加回復回答。 –