【问题标题】:optim with inequality constraint带有不等式约束的优化
【发布时间】:2011-09-07 17:12:46
【问题描述】:

我正在尝试在 R 中使用 optim() 来求解以下等式中的 lambda:

lambda/sigma^2 - ln(lambda/sigma^2) = 1 + 1/Q

受约束:

lambda > sigma^2.

我不确定如何在 R 中进行设置。

我也对其他优化例程持开放态度,尽管该等式似乎是凸的,因此 optim 应该是一个不错的选择。

谢谢!

【问题讨论】:

  • 是 lambda 唯一的变量吗?如果您检查?optim 中的“注释”以了解一维问题,建议使用optimize()。当您说“求解 lambda”时,您的方程式中是否缺少等式(或不等式)?或者你想最小化或最大化你的表达?
  • 我更新了方程式(我有一个错字)。是的,这是一个一维问题。我将探索 optimize() - 感谢您的领导!

标签: r optimization constraints solver


【解决方案1】:

您正在尝试求解一个方程。是否满足约束,只能事后决定。 你可以使用uniroot如下

f <- function(x,sigma=1,Q=1) {x/sigma^2 - log(x/sigma^2) - 1 - 1/Q}
uniroot(f,c(1,5))

给予

$root
[1] 3.146198

$f.root
[1] 3.552369e-06

$iter
[1] 5

$estim.prec
[1] 6.103516e-05

【讨论】:

  • 补充说明:只要 Q>=0,x 的解将始终 >=sigma^2。
【解决方案2】:

决定这更像是一个答案而不是评论。

optimoptimize 都最小化函数,所以你要做的是编写一个错误函数,它返回例如给定 lambda (se(lambda, sigma^2, Q)) 的平方误差,确保你的 lambda 是第一个参数)。然后调用optim(f = se, lower = sigma^2, sigma^2, Q),它将返回最小化错误函数的 lambda 值。如果您有多个数据点(Q、sigma^2 对),则将您的函数设为误差平方和或尝试使用nls()

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 2015-10-08
    • 2016-07-19
    • 2019-11-17
    • 1970-01-01
    • 2021-12-28
    • 2019-05-23
    • 2018-03-15
    • 2020-01-11
    相关资源
    最近更新 更多