【发布时间】:2019-12-13 05:23:54
【问题描述】:
这是一个更普遍的问题,有点独立于数据,所以我没有 MWE。
我经常有函数fn(.) 实现不可微但我想优化的算法。我通常将optim(.) 与它的标准方法一起使用,这在速度和结果方面对我来说都很好。
但是,我现在遇到一个问题,需要我对fn 的几个参数之一设置界限。据我了解,optim(method="L-BFGS-B",...) 允许我设置参数限制,但也需要渐变。因为fn(.) 不是数学函数而是算法,我怀疑它没有可以通过微分推导出的梯度。这让我想问是否有一种方法可以在 R 中以不需要我给出梯度的方式执行约束优化。
我查看了一些来源,例如John C. Nash 关于这个主题的文章,但据我了解,它们主要涉及可以提供梯度的可微函数。
【问题讨论】:
-
有时您可以不提供梯度而让求解器进行有限差分。更好的方法是使用适当的 无导数优化 (DFO) 求解器。一个例子是cran.r-project.org/web/packages/dfoptim/dfoptim.pdf
-
只要它是可微的,你就不需要实际提供梯度。
optim的gr参数可以省略。 -
您也许还可以重新参数化事物作为维护边界的一种方式。例如优化日志可以用来保持积极
-
您可以使用遗传算法或差分进化或任何其他进化算法。这些是黑盒优化器,不需要目标的任何属性,只需要适应度值...
标签: r optimization