gpt4 book ai didi

r - 尝试使用optim()进行约束优化时出现错误

转载 作者:行者123 更新时间:2023-12-04 11:34:02 25 4
gpt4 key购买 nike

我一直在使用Excel求解器来处理以下问题

求解方程式中的b和c:

y = a*b*c*x/((1 - c*x)(1 - c*x + b*c*x))

受约束
0 < a < 100
0 < b < 100
0 < c < 100

f(x[1]) < 10
f(x[2]) > 20
f(x[3]) < 40

我有大约10(x,y)个值对。我将abs(y-f(x))的总和最小化。而且,我可以限制函数在每个x处的结果的系数和值的范围。

我尝试了nls(没有尝试施加约束),而Excel提供了我愿意提供的几乎所有初始值的估算值,而nls几乎从未返回过答案。

我改用了optim,但是在应用约束时遇到了麻烦。

这是我到目前为止所到的地方-
best = function(p,x,y){sum(abs(y - p[1]*p[2]*p[3]*x/((1 - p[3]*x)*(1 - p[3]*x + p[2]*p[3]*x))))}
p = c(1,1,1)
x = c(.1,.5,.9)
y = c(5,26,35)
optim(p,best,x=x,y=y)

我这样做是为了添加第一组约束-
optim(p,best,x=x,y=y,method="L-BFGS-B",lower=c(0,0,0),upper=c(100,100,100))

我收到错误““错误:ABNORMAL_TERMINATION_IN_LNSRCH”

并以较高的错误值($ value)结束。所以看来我做错了什么。我完全不知道如何应用我的其他约束。

有人可以给我一个基本的想法,如何解决非统计学家可以理解的问题?我看了很多文章,看了几本R书。 R书在最简单的使用optim时就停止了。

最佳答案

绝对值引入奇点:
您可能要改用正方形,
特别是对于基于梯度的方法(例如L-BFGS)。

函数的分母可以为零。

参数出现在产品中的事实
并且您允许它们为零(任意接近)
也会引起问题。

您可以尝试使用其他优化器
(optimization task view上的完整列表),
直到找到优化收敛的目标。

x0 <- c(.1,.5,.9)
y0 <- c(5,26,35)
p <- c(1,1,1)
lower <- 0*p
upper <- 100 + lower
f <- function(p,x=x0,y=y0) sum(
(
y - p[1]*p[2]*p[3]*x / ( (1 - p[3]*x)*(1 - p[3]*x + p[2]*p[3]*x) )
)^2
)

library(dfoptim)
nmkb(p, f, lower=lower, upper=upper) # Converges

library(Rvmmin)
Rvmmin(p, f, lower=lower, upper=upper) # Does not converge

library(DEoptim)
DEoptim(f, lower, upper) # Does not converge

library(NMOF)
PSopt(f, list(min=lower, max=upper))[c("xbest", "OFvalue")] # Does not really converge
DEopt(f, list(min=lower, max=upper))[c("xbest", "OFvalue")] # Does not really converge

library(minqa)
bobyqa(p, f, lower, upper) # Does not really converge

作为最后的选择,您始终可以使用网格搜索。
library(NMOF)
r <- gridSearch( f,
lapply(seq_along(p), function(i) seq(lower[i],upper[i],length=200))
)

关于r - 尝试使用optim()进行约束优化时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11387330/

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