次の機能を最小化しようとしました。
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 で実行するたびに、正しくない新しい解が得られます。
alabama または DEoptim で spg() などの別の最適化関数も試しましたが、問題は解決されませんでした。
だから私の質問は:
1-Rでfuncを最小化できる解決策はありますか?
2- R と Mathematica の精度に違いはありますか? Mathematica では正確な答えが得られるのに R では得られないのはなぜですか?
前もって感謝します