Rによる非線形計画問題
統計ソフトRのRsolnpパッケージを使って、2次式制約のもと2次式の最適化を行った。
制約が2次式なので、2次計画法を解くパッケージである"quadprog"は利用できない。
今回の例題はこちら。
minimize
subject to
Lagrangeの未定乗数法なり、円が接する状態を幾何学的に解くなりすると最適解が求まり、最適解は
であり、このとき
である。
setwd("H:\\workspace3.5_R\\RsolnpTest") library(Rsolnp) #equality constraint eq.value <- c(1) equalityConstraint <- function(x){ A <- matrix(c(1,0,0,1),2,2) return(t(x) %*% A %*% x) } #objective function objectiveFunction <- function(x){ A <- matrix(c(2,0,0,2),2,2) b <- matrix(c(-4,-4),2,1) c <- matrix(c(8),1,1) return((1/2)* t(x) %*% A %*% x + t(x) %*% b + c) } #execute optimization x <- c(1,1) solution <- solnp(x,objectiveFunction,eqfun = equalityConstraint, eqB = eq.value) solution$pars solution$values #correct solution ((2*sqrt(2)-1)^2) correct.solution <- (2*sqrt(2)-1)^2 correct.solution #-- save RData save.image("2011.05.11_RsolnpTest.RData")
結果はこちら。
Iter: 1 fn: 3.1250 Pars: 0.75000 0.75000 Iter: 2 fn: 3.3368 Pars: 0.70833 0.70833 Iter: 3 fn: 3.3431 Pars: 0.70711 0.70711 Iter: 4 fn: 3.3431 Pars: 0.70711 0.70711 Iter: 5 fn: 3.3431 Pars: 0.70711 0.70711 solution$pars solution$values [1] 0.7071068 0.7071068 [1] 2.000000 3.125000 3.336806 3.343140 3.343146 3.343146
となっている。
出力結果は最適化計算の途中計算の推移を並べて出力する。
ちなみにHelpに書いてあるのだが、最適化計算を行うのに逐次2次計画法(SQP)を使っている。
これは使えそうなパッケージの予感。