R init val中的constrOptim不在可行区域误差的内部 [英] constrOptim in R - init val is not in the interior of the feasible region error

查看:173
本文介绍了R init val中的constrOptim不在可行区域误差的内部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用constrOptim软件包.这是我的设置:

I am trying to use constrOptim package. Here is my set up:

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

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

it is easy to check that my initial value is in the interior of the feasible region (which is from docs: 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参数中减去模糊值:

If you search Google you get an answer from @HongOoi in the comments of another question with a similar error message. Hong Ooi suggested subtracting a fuzz value from the ci argument:

  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失败了一个严格的不等式:

I think this is probably an issue that might warrant sending a request to the R-devel mailing list for documentation improvement, although arguable you are not actually in the interior of the feasible range since the constraint tes fails a strict inequality:

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

不等式满足了您的前三个约束,但边界上的不满足最后两个约束.

Your first three constraints were satisfied by the inequality but not the last two which were on the boundary.

这篇关于R init val中的constrOptim不在可行区域误差的内部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆