constrOptim in R - init val 不在内部的可行区域误差



我正在尝试使用constrOptim包。这是我的设置:

test_func <- function(x){
return((x%*%x)[1,1])
}
constrOptim(rep(1/3,3), f=test_func,grad = NULL,
ui = rbind(diag(3),rep(1, 3), rep(-1,3)),
ci = c(rep(0,3),1,-1), method = "Nelder-Mead")

它生成错误:

Error in constrOptim(rep(1/3, 3), f = test_func, grad = NULL, ui = rbind(diag(3),  : 
initial value is not in the interior of the feasible region

很容易检查我的初始值是否在可行区域的内部(来自文档:ui %*% theta - ci >= 0( constrOptim

ui %*% rep(1/3, 3) - ci

生产:

[,1]
[1,] 0.3333333
[2,] 0.3333333
[3,] 0.3333333
[4,] 0.0000000
[5,] 0.0000000

我错过了什么?

如果您搜索Google,您会在另一个带有类似错误消息的问题的评论中得到@HongOoi的答案。Hong Ooi 建议从ci参数中减去一个模糊值:

fuzz = - 1e-6

constrOptim(rep(1/3,3), f=test_func,grad = NULL,
ui = rbind(diag(3),rep(1, 3), rep(-1,3)),
ci = c(rep(0,3),1,-1)- 1e-6, method = "Nelder-Mead")
#---------------------
$par
[1] 0.3333317 0.3333327 0.3333346
$value
[1] 0.3333327
$counts
[1] 0
$convergence
[1] 0
$message
NULL
$outer.iterations
[1] 1
$barrier.value
[1] 0.000209865

我认为这可能是一个可能需要向 R-devel 邮件列表发送请求以改进文档的问题,尽管有争议的是,您实际上并不在可行范围的内部,因为约束 tes 未能满足严格的不等式:

ui %*% rep(1/3,3) - ci > 0
[,1]
[1,]  TRUE
[2,]  TRUE
[3,]  TRUE
[4,] FALSE
[5,] FALSE

你的前三个约束由不等式满足,但最后两个约束在边界没有满足。

最新更新