gpt4 book ai didi

r - 有没有办法为R optimx中的每次迭代提取参数和目标函数

转载 作者:行者123 更新时间:2023-12-04 23:40:26 24 4
gpt4 key购买 nike

假设我要使用 R 解决一个优化问题, optimx .有什么方法可以随着时间的推移提取参数和目标函数值?

f<-function(x){
return(sum(abs(x)))
}

gr<-function(x){
return(sign(x))
}
opt=optimx::optimx(runif(2),f,gr,method="BFGS")

目标是试图制作这样的情节:

enter image description here

我认为我们可以使用以下代码使用 Gradient Decent 手动执行此操作,但是我如何在 optimx 中执行此操作?
x=c(0.5,1.5)
alpha=0.1
max_iter=20
x_trace=matrix(rep(0,max_iter*2),ncol=2)

for (i in 1:max_iter){
x=x-alpha*gr(x)
x_trace[i,]=x
}
f_trace=apply(x_trace,1,f)

最佳答案

创建副作用:

f<-function(x){
.GlobalEnv$i <- get("i", envir = .GlobalEnv) + 1
.GlobalEnv$log[get("i", envir = .GlobalEnv),] <- x
return(sum(abs(x)))
}

gr<-function(x){
return(sign(x))
}

library(optimx)
i <- 0
log <- matrix(numeric(100 * 2), ncol = 2)

opt <- optimx(c(0.8, -0.9),f,gr,method="BFGS")
log <- log[seq_len(i), ]

plot(log, type = "l", xlim = c(-2, 2), ylim = c(-1.2, 1.2))

resulting plot

请注意,这包括所有函数调用,即使是那些算法拒绝结果并重试的函数调用。 control = list(trace = TRUE, REPORT = 1)optimx打印接受尝试的函数值,您可以 capture.output并使用它仅从 log 获取这些参数.

最好改 optimx返回所有接受的尝试,但我不会投入这种努力。您可以询问 Nash 教授他是否愿意这样做,但如果您没有令人信服的常见用例,他可能也不会这样做。

关于r - 有没有办法为R optimx中的每次迭代提取参数和目标函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com