我试图最小化以下功能:
func <- function(qq){
x <- qq[1]
y <- qq[2]
output <- 1 - 2 * x + x^2 - 2 * y + 2 * x * y + y^2
return(output)
}
当 x+y=1 且 0<=x,y<=1 时。要在 Rsolnp 包中使用 gosolnp,首先,我定义了 cons 以在 eqfun 参数中使用它:
cons <- function(qq)
sum(qq)
然后我应用了 gosolnp 函数:
install.packages("Rsolnp")
require(Rsolnp)
gosolnp(fun = func, LB = c(0, 0), UB = c(1, 1), eqfun = cons, eqB = 1)
res$pars
[1] 0.8028775 0.1971225
res$value
[1] 2.606528e-09 -5.551115e-17
答案应该是 x = 0 和 y = 1,但是你可以在每次运行 gosolnp 时尝试,你会得到新的点,在那个点上 func 大约为 0(不完全是)。Mathematica 和 Maple 非常快地对此函数进行优化,并给出了正确的答案,即 x = 0 和 y = 1,但是 R 中的每次运行都会给出一个不正确的新解决方案。
我还在阿拉巴马州或 DEoptim 中尝试了另一个优化函数 spg(),但问题仍未解决。
所以我的问题是:
1-有什么解决方案可以最小化R中的func吗?
2- R 和 Mathematica 的精度之间有什么区别,为什么 Mathematica 可以给我确切的答案,但 R 不能?
先感谢您