【问题标题】:constrained optimization without gradient无梯度的约束优化
【发布时间】: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
  • 只要它是可微的,你就不需要实际提供梯度。 optimgr 参数可以省略。
  • 您也许还可以重新参数化事物作为维护边界的一种方式。例如优化日志可以用来保持积极
  • 您可以使用遗传算法或差分进化或任何其他进化算法。这些是黑盒优化器,不需要目标的任何属性,只需要适应度值...

标签: r optimization


【解决方案1】:

总结到目前为止的cmets(这些都是我自己会说的):

  • 可以在不提供显式渐变的情况下使用method="L-BFGS-B"gr 参数是可选的);在这种情况下,R 将通过有限差分(@G.Grothendieck)计算导数的近似值。这是最简单的解决方案,因为它“开箱即用”:您可以尝试一下,看看它是否适合您。然而:
    • L-BFGS-B 可能是optim() 提供的方法中最挑剔的方法(例如,它无法处理一组试验参数评估为NA 的情况)
    • 有限差分近似相对速度较慢且数值不稳定(但对于简单的问题很好)
  • 对于简单的情况,您可以将参数拟合到转换后的比例,例如如果b 是一个必须为正的参数,您可以使用log_b 作为参数(并在您的目标函数中通过b <- exp(log_b) 对其进行转换)。 (@SamMason)但是:
    • 并不总是有一个简单的转换可以实现您想要的约束
    • 如果最优解在边界上,变换会出问题
  • 有多种带有约束的无导数优化器(通常是“框约束”,即独立的下限和/或上限一个或多个参数)(@ErwinKalvelagen):dfoptim 有一些,我用过nloptr 包(及其 BOBYQA 优化器)广泛,minqa 也有一些。 这是我推荐的解决方案。

【讨论】:

  • 我不太确定其中的一些 cmets,包括速度、稳定性和数值梯度。我在很多问题上与optim 有很好的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2021-12-28
  • 1970-01-01
  • 2018-05-03
相关资源
最近更新 更多