Optimisasi Berbasis Gradient

Misalnya didefinisikan suatu fungsi sebagai berikut.

f(x,y)=(x−2)2+(y+1)2

Tentukan titik optimum fungsi tersebut jika digunakan nilai awal (5,5).

# fungsi 
rosenbrock = function(par){

  x = par[1]
  y = par[2]

  (x-2)^2 + (y+1)^2
}

# tentukan nilai awal 
start = c(5,5)
# Optimasi Conjugate Gradient 
res_cg = optim(start, rosenbrock, method="CG")
res_cg
## $par
## [1]  2.0000001 -0.9999999
## 
## $value
## [1] 2.112611e-14
## 
## $counts
## function gradient 
##       31       13 
## 
## $convergence
## [1] 0
## 
## $message
## NULL
# Optimasi Quasi-Newton (BFGS)
res_bfgs = optim(start, rosenbrock, method="BFGS")
res_bfgs
## $par
## [1]  2 -1
## 
## $value
## [1] 3.096423e-23
## 
## $counts
## function gradient 
##       11        3 
## 
## $convergence
## [1] 0
## 
## $message
## NULL
# Optimasi Newton
res_newton = nlm(rosenbrock, start)
res_newton
## $minimum
## [1] 1.249999e-12
## 
## $estimate
## [1]  1.999999 -1.000000
## 
## $gradient
## [1] 2.220446e-16 1.233014e-12
## 
## $code
## [1] 1
## 
## $iterations
## [1] 2