在R语言的'optim'函数中如何控制步长

5
我正在使用R语言中的“optim”函数来优化一个函数。然而,我要优化的变量的真实值至少相隔10^-5左右。但是,据我所知,缺省步长(即“optim”添加到每个控制变量上以查看它如何改变目标函数的量)的数量级为10^-8。
有没有什么简单的方法告诉“optim”函数将步长增加到10^5或更高?
参考代码如下:
Optimal <- optim(par = starting, fn =expectedSeats,
                       propensities = propsShocked, n = NumberofDistricts, 
                       shockType = "normal", shockSD = 0.1,
                       method =  "L-BFGS-B",
                       lower = rep(0,NumberofDistricts), upper = rep(1,NumberofDistricts),
                       control=list(factr =  1e12)
                       )

我已经搜索了一下,似乎无法弄清楚这个问题。谢谢!


(1)有两个步长。一个是在线搜索中,另一个是在进行有限差分计算时。 (2)求解器假定函数是连续平滑的。这意味着您真的不应该对步长施加这样的限制(无论是我在1中提到的哪一个)。 - Erwin Kalvelagen
1
嗨,感谢您的回复。我能否请教您在R中是否有其他优化算法推荐,您认为这些算法可能适用于我的问题。我发布的算法经常收敛到不同的局部最小值。我的问题的关键特征是:1)大量的选择变量,2)被评估的函数相当缓慢,3)选择变量具有绝对边界(介于0和1之间)。任何提示都将是极好的!谢谢 - user434180
我对你的问题不是很了解,这就像医生在没有检查病人的情况下进行诊断。昂贵的函数评估通常意味着没有简单的梯度(有限差分非常昂贵)。这表明无导数方法可能是合适的。 - Erwin Kalvelagen
更多的信息或者提供一个可重现的例子可以帮助澄清问题。 - Nairolf
1
如果目标函数的评估速度较慢,我的最新R软件包optimParallel https://cran.r-project.org/package=optimParallel 可能会引起您的兴趣。 - Nairolf
1个回答

0
据我理解你的问题,我认为你可以在control=选项的ndeps参数中指定步长值。根据文档,其默认值为1e-3(而不是1e-8)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接