Optimization with matlab dan r EXTRAS
Pendahuluan Model optimasi berusaha untuk menjelaskan, secara matematis, tujuan menyelesaikan masalah dalam jalan terbaik. Misalkan dalam bisnis: problem untuk memaksimalkan keuntungan, meminimalkan kerugian, memaksimalkan efisiensi, atau meminimalkan resiko; Problem optimasi secara tipikal akan memaksimalkan atau meminimalkan suatu fungsi yang disebut fungsi obyektif (objective function) pada himpunan titik-titik S (feasible set). Secara umum feasible set didefinisikan dalam variabel kendala (constraints);
Optimasi Linier π π₯ =2 π₯ 1 + π₯ 2 Fungsi obyektif Kendala Apabila fungsi obyektif dan variabel kendala yang akan dioptimalkan linier, maka optimasinya adalah optimasi linier; Contoh 1: Problem: menemukan nilai π₯ 1 dan π₯ 2 sedemikian sehingga fungsi obyektif menjadi optimal. Fungsi obyektif π π₯ =2 π₯ 1 + π₯ 2 Kendala π₯ 1 + π₯ 2 β€1; π₯ 1 β₯0; π₯ 2 β₯0
Optimasi Linier Contoh 2: persamaan linier Dimana π₯ 1 , π₯ 2 , π₯ 3 adalah tiga parameter yang tidak diketahui yang menentukan persamaan kuadratik tersebut. Tiga titik yang mendefinisikan persamaan tersebut adalah: π₯ 1 +2 π₯ 2 +4 π₯ 3 =1 π₯ 1 +3 π₯ 2 +9 π₯ 3 =6 π₯ 1 +5 π₯ 2 +25 π₯ 3 =4
Non linier optimasi π π₯ = π₯ 1 + π₯ 2 2 Fungsi obyektif Kendala Apabila salah satu dari fungsi obyektif atau variabel kendala yang akan dioptimalkan non-linier, maka optimasinya adalah optimasi non linier. Contoh: Problem: menemukan nilai π₯ 1 dan π₯ 2 sedemikian sehingga fungsi obyektif menjadi optimal. Fungsi obyektif π π₯ = π₯ 1 + π₯ 2 2 Kendala π₯ 1 π₯ 2 β€0; β2β€π₯ 1 β€1; β2β€π₯ 2 β€1
Exponential smoothing Apa yang dioptimalkan dalam exponential smoothing? Parameter smoothing sedemikian sehingga model exponential smoothing memiliki MSE terkecil Siapa yang menjadi fungsi obyektif? Fungsi MSE yaitu πππΈ= 1 π π=1 π π¦ π β π¦ π 2 Siapa yang menjadi kendalan (constraints)? Syarat dari nilai-nilai parameter yaitu nilai parameter yang berada diantara 0 hingga 1. Termasuk ke dalam optimasi linier atau non linier? Mengapa? Optimasi non linier, karena data dibobot secara eksponensial sehingga menyebabkan parameter pembobot tidak linier.
Levenberg-marquardt Fungsi dalam MATLAB: lsqcurvefit dengan option: algoritma βlevenberg-marquardtβ Fungsi lsqcurvefit: Sintak: [x, resnorm] = lsqcurvefit (fun, x0, xdata, ydata, lb, ub, options) Output: X : hasil parameter optimum Resnorm : residual Input Fun : fungsi obyektifnya; x0 : nilai awal parameter yang akan dioptimasi; lb, ub : lower bound, upper bound untuk parameter yang akan dioptimasi; Dimana options dapat diisi dengan: TolFun : toleransi fungsi untuk menghentikan iterasi, ketik: βTolFunβ, 1e-4 MaxIter : maksimum iterasi yang diinginkan, ketik: βMaxIterβ, 200 Algorithm : ketik βAlgorithmβ, βlevenberg-marquardtβ
Levenberg-marquardt Fungsi obyektif 1 Proses optimasi
Contoh 1: data yang digunakan 5.1 2 4 3 6.7 5 9.2 6 7.8 7 10 8 9 10.3 11.1 Model yang digunakan adalah Holt Exponential Smoothing. Parameter hasil optimasi: Alpha : 0.4050 Beta : 0.5221
Quasi-newton Fungsi MATLAB lain yang dapat digunakan untuk optimasi non-linier adalah: fmincon Fungsi fmincon: menemukan minimum dari suatu fungsi obyektif yang memiliki kendala (constraint); Sintak: [x, fval] = fmincon (fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options) Output: x : parameter Fval : nilai dari fungsi obyektif
Quasi-newton Sedikit berbeda dengan lsqcurvefit, fungsi obyektif yang akan diminimalkan menggunakan fungsi fmincon adalah fungsi MSE; sehingga kita harus mendefinisikan fungsi MSE-nya terlebih dahulu. Fungsi MSE πππΈ= 1 π π=1 π π¦ π β π¦ π 2 Contoh data yang digunakan sama pada contoh 1; Parameter optimum yang dihasilkan adalah: Alpha : 0.4049 Beta : 0.5203
Quasi-newton Fungsi obyektif 2 Proses optimasi
Least-square data fitting Fungsi MATLAB yang digunakan addalah lsqnonlin Fungsi lsqnonlin: Dengan menggunakan fungsi obyektif 2, proses optimasinya: Hasil optimasi: Alpha : 0.4064 Beta : 0.5187
GENETIC ALGORITHM Menggunakan optimasi dari genetic-algorithm dengan fungsi: ga Fungsi obyektif yang digunakan adalah fungsi obyektif 2; Hasil optimasi: Alpha : 0.4024 Beta : 0.5259
Function ses single_es <- function(param, aktual){ n = dim(aktual) Fo = matrix(0,n[1],1) #inisial value Fo[1] = aktual[1,1] for (i in 2:n[1]){ Fo[i] = param*aktual[i-1,1]+(1-param)*Fo[i-1] } return(Fo)
Fungsi MSE menjadi fungsi obyektifnya Function brown brown <- function(par,data1) { n = dim(data1); Fo = matrix(0,n[1],1); S1 = matrix(0,n[1],1); S2 = matrix(0,n[1],1); a = matrix(0,n[1],1); b = matrix(0,n[1],1); # initial value S1 [1] = sum(data1[1:3,1])/3; S2 [1] = sum(data1[1:3,1])/3; Fo [1] = sum(data1[1:3,1])/3; for (i in 2:n[1]) S1[i] = par*data1[i,1]+(1-par)*S1[i-1]; S2[i] = par*S1[i]+(1-par)*S2[i-1]; b[i] = par/(1-par)*(S1[i]-S2[i]); a[i] = 2*S1[i]-S2[i]; Fo[i] = a[i-1]+b[i-1]; } return(c(Fo,a,b)) Fungsi MSE menjadi fungsi obyektifnya msebrown <- function(par,data) { prediksi = brown(par,data); err2 = (prediksi-data)^2 msebrown = mean(err2) }
library Library dalam R yang digunakan untuk optimasi adalah minpack.lm Lakukan: Install package: minpack.lm Load minpack.lm dalam library di R
Optimisasi coba1 = nlm(msebrown,c(0.1),data = datt) coba2 = nls.lm(c(0.1),lower = NULL, upper = NULL, msebrown, data = datt) Nilai c(0.1) adalah nilai awal parameter yang akan diestimasi. Pilih sembarang nilai untuk nilai tersebut. Function nlm merupakan optimasi menggunakan algoritma Newton Function nls.lm merupakan optimasi menggunakan metode Levenberg-Marquardt
referensi Griva, I., Nash, S. G., Sofer, A., 2009, Linier and Non Linier Optimization 2nd Edition, SIAM. MATLAB non linier optimization toolbox; www.mathworks.com/help