Optimization 2

library(optimization)
## Warning: package 'optimization' was built under R version 4.3.2
## Loading required package: Rcpp
library(Ryacas)
## 
## Attaching package: 'Ryacas'
## The following object is masked from 'package:stats':
## 
##     integrate
## The following objects are masked from 'package:base':
## 
##     %*%, det, diag, diag<-, lower.tri, upper.tri

**Optimasi Numerik

Optimasi satu variabel digunakan saat fungsi objektif hanya memiliki 1 variabel penjelas.

Metode yang digunakan :

• Metode golden section • Metode Newton

Metode Golden Section

Golden section merupakan salah satu cara atau metode optimasi numerik yang dapat diterapkan untuk fungsi yang bersifat unimodal.

Ide dasar metode ini adalah memanfaatkan nilai yang lama sebagai nilai yang baru, secara iteratif. Sebagai akibatnya, rentang/ interval awal variabel yang dipilih semakin lama akan semakin menyempit, karena ada sebagian sub-interval variabel yang dieliminasi, hingga diperoleh tingkat konvergensi yang diinginkan.

Algoritma Golden Section (Untuk nilai minimum)

  1. Tentukan selang [a, b] yang memuat nilai minimum. Dapat dilihat dengan menggunakan grafik fungsi

Perkecil selang menjadi [a’, b’] yang memuat nilai minimum atau maksimum. Kriteria pemilihan a’ dan b’ adalah nilai diantara a dan b, sesuai dengan golden ratio

a’ = a + d b’ = a - d

dengan d = R (b-a)

  1. Tentukan x1 dan x2 x1 = b - (b-a)/R x2 = a + (b-a)/R

Hitung f(x1) dan f(x2)

Jika f(x1) > f(x2) maka [a’,b’]=[x1,b] Jika f(x1) < f(x2) maka [a’,b’]=[a,x2]

  1. Iterasi sampai |b’-a’| lebih kecil dari nilai tolerans Catatan : Untuk nilai maksimum, gunakan algoritma kebalikannya.

Metode Golden Section untuk nilai minimum:

goldenMin <- function (f, a, b,tol = 0.0000001) {
ratio <- 2 / ( sqrt (5) +1)
x1 <- b - ratio * (b - a)
x2 <- a + ratio * (b - a)
f1 <- f(x1)
f2 <- f(x2)

while (abs (b - a) > tol ) {
if (f2 > f1) {
b <- x2
x2 <- x1
f2 <- f1
x1 <- b - ratio * (b - a)

f1 <- f(x1)
} else {
  a <- x1
  x1 <- x2
  f1 <- f2
  x2 <- a + ratio * (b - a)
  f2 <- f(x2)
  }
  }
return ((a + b) / 2)
}

Metode golden section untuk nilai maksimum

goldenMax <- function (f, a, b,tol = 0.0000001) {
ratio <- 2 / ( sqrt (5) +1)
x1 <- b - ratio * (b - a)
x2 <- a + ratio * (b - a)
f1 <- f(x1)
f2 <- f(x2)

while (abs (b - a) > tol ) {
if (f2 < f1) {
b <- x2
x2 <- x1
f2 <- f1
x1 <- b - ratio * (b - a)

f1 <- f(x1)
} else {
  a <- x1
  x1 <- x2
  f1 <- f2
  x2 <- a + ratio * (b - a)
  f2 <- f(x2)
  }
  }
return ((a + b) / 2)
}

Mencari nilai minimum dari f(x)=|x−3.5|+(x−2)2

f <- function (x) { abs(x -3.5) + (x -2) ^2}
curve(f)