gpt4 book ai didi

r - R中使用optim和optimx函数的迭代次数

转载 作者:行者123 更新时间:2023-12-03 17:38:52 26 4
gpt4 key购买 nike

为了使关于2个参数的功能最小化,我在R中都使用了Nipder-Mead方法的optim或optimx函数。我分别将optim和optimx函数的itnmax和maxit固定为1,但这花了我很多时间来解决它。
itnmax = 1或maxit = 1真的意味着1个迭代步骤吗?因为如果是的话,它不会花费太多时间。

这是带有f函数的最小化优化函数。评估功能大约需要10秒钟。 10分钟后我停止了优化,因为它仍然没有完成。

parmin=optimx(c(3,0.04),fn=f,method="Nelder-Mead",itnmax=1)

最佳答案

具有评估计数器的测试功能,强制延迟(我将其设置为1秒),并跟踪输出(对于我们当中急躁的人)

eval_count <- 0
f <- function(x) {
cat(".")
eval_count <<- eval_count + 1
Sys.sleep(1)
return(sum(x^2) )
}

parmin=optimx(c(3,0.04),fn=f,method="Nelder-Mead",itnmax=1)
eval_count ## 52


因此,每次评估大约需要10秒,我希望您的功能大约需要520秒(但可能会更长,具体取决于具体时间-见下文)。

那么这是怎么回事?主要问题是 optimx通过一种昂贵的方法(Richardson外推法:请参见 ?numDeriv::grad)来计算Hessian,以便进行更严格的收敛测试。它还在启动时进行一些测试。 ?optimx说(在控制参数的详细信息下):


如果我们不想测试Kuhn,Karush,Tucker最优性条件,则kkt = FALSE。默认值为TRUE。但是,由于Hessian的计算速度可能很慢...


如果您的目标函数不是二次函数,那么Richardson推断可能会更昂贵(需要更多函数调用),这可以解释8.7分钟(= 52 * 10/60)和10分钟之间的差异。或者,如果您的函数需要12秒而不是10秒,那么对于52个函数求值,期望值也将超过10分钟。

eval_count <- 0
parmin=optimx(c(3,0.04),fn=f,method="Nelder-Mead",itnmax=1,
control=list(starttests=FALSE,kkt=FALSE))
eval_count ## 5

关于r - R中使用optim和optimx函数的迭代次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45717112/

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