6 metode optimasi golden section dan toolbox optimasi matlab
TRANSCRIPT
Metode Optimasi Golden Section dan Toolbox Optimasi Matlab
Pemrograman Komputer STTN BATAN
oleh Gde Pandhe Wisnu Suyantara
Misalkan suatu fungsi y=f(x) memiliki titik optimum yang dapat berupa titik maksimum
dan/atau titik minimum. Untuk menentukan titik optimum ini dapat dilakukan secara analitis
dengan cara mencari nilai turunan fungsi kemudian mencari nilai nol dari turunan fungsi
tersebut.
y’=f’(x)=0
Namun untuk beberapa fungsi, proses mencari turunan fungsinya cukup rumit sehingga proses
untuk menentukan titik optimum harus menggunakan metode lain misalnya metode Golden
Section untuk satu variabel, dan Hooke Jeeves untuk multivariable.
Suatu fungsi dapat memiliki satu titik optimum yang disebut sebagai fungsi unimodal. Beberapa
fungsi juga dapat memiliki satu atau lebih titik optimum, fungsi seperti ini disebut sebagai
fungsi multimodal. Untuk fungsi multimodal maka titik optimum yang diperoleh sangat
tergantung dari titik awal yang digunakan untuk menebak titik optimum tersebut.
Optimasi fungsi juga dapat diklasifikasikan berdasarkan kepada jumlah variabel yang akan
dioptimasi. Untuk satu variabel, maka dapat disebut optimasi fungsi satu variabel sedangkan
untuk lebih dari satu variabel maka disebut sebagai optimasi fungsi multivariabel.
Metode Golden Section merupakan metode untuk menentukan titik optimum (titik maksimum
atau minimum) untuk satu variabel. Metode Hooke Jeeves merupakan metode untuk
menentukan titik optimum untuk lebih dari satu variabel. Dalam kesempatan ini hanya metode
Golden Section yang akan dibahas sedangkan metode Hooke Jeeves akan digantikan dengan
menggunakan langsung toolbox optimasi yang sudah tersedia di dalam Matlab misalnya
fminsearch, fminbnd, dan fmincon.
1. Metode Optimasi Satu Variabel Golden Section
Seperti yang sudah dijelaskan sebelumnya bahwa metode Golden Section merupakan metode
optimasi satu variabel. Selain itu untuk menggunakan metode ini diperlukan syarat batas-batas
dari interval optimasi sudah diketahui atau dengan kata lain metode ini memerlukan dua nilai
tebakan berupa interval dimana diperkirakan titik optimum tersebut berada.
y=f(x)
xA xBxP xQ
l
l
1-l
Gambar 1. Ilustrasi optimasi dengan golden section
misalkan daerah interval tersebut berada diantara xA dan xB seperti yang ditunjukkan pada
Gambar 1. Dari daerah tersebut diambil dua titik yaitu xP dan xQ sebagai titik evaluasi. Dari
gambar dapat dilihat bahwa ada faktor l yang digunakan untuk menentukan titik xP dan xQ.
Secara matematis titik xP dan xQ dapat dituliskan sebagai berikut:
xAxPxA-xQxAxB
11
sehingga diperoleh persamaan untuk menentukan titik xP dan xQ sebagai berikut :
xAxPxAxB
11
xAxBxAxP 1 (1)
Untuk titik xQ maka digunakan :
xA-xQxAxB
1
xAxBxAxQ (2)
Nilai l yang digunakan adalah sebesar :
61802
15,
dengan menggunakan dua titik xP dan xQ tersebut selanjutnya dapat dilakukan evaluasi untuk
menghilangkan/ mengeleminasi interval yang tidak diperlukan secara bertahap seperti yang
ditampilkan pada Gambar 2 berikut.
xA xBxP xQ
l
l
1-l
xA xBxP xQ
l
l
xA xBxP xQ
l
l
xA xBxQ
l
l
xP
1
2
3
4
Gambar 2. Proses optimasi dengan golden section
Dapat dilihat bahwa semakin lama interval xA dan xB semakin mendekat begitu juga halnya
dengan xP dan xQ hingga pada suatu saat xA dan xB tidak berbeda jauh dan memenuhi kriteria
toleransi error yang disyaratkan.
Prosedur eleminasi yang digunakan dengan membandingkan nilai y pada setiap titik
perhitungan evaluasi yaitu titik P dan Q. Dari hasil nilai y pada kedua titik evaluasi kemudian
ditentukan langkah-langkah elemniasi yang sesuai dengan kriteria optimasi yang dilakukan.
Untuk Kriteria Maksimasi maka berlaku
Jika yP<yQ maka : Ganti titik P
xA=xP
xP=xQ
xB=xB
xQ dihitung dengan persamaan (2)
Jika yP>yQ maka : Ganti titik Q
xB=xQ
xQ=xP
xA=xA
xP dihitung dengan persamaan (1)
Untuk Kriteria Minimasi maka berlaku
Jika yP<yQ maka : Ganti titik Q
xB=xQ
xQ=xP
xA=xA
xP dihitung dengan persamaan (1)
Jika yP>yQ maka : Ganti titik P
xA=xP
xP=xQ
xB=xB
xQ dihitung dengan persamaan (2)
Untuk memudahkan dalam melakukan program, umumnya yang digunakan adalah prosedur
minimasi, sedangkan untuk prosedur maksimasi dilakukan dengan mengalikan nilai y
minimasi dengan tanda -1 (minus satu) sehingga secara otomatis minimasi akan berubah
menjadi prosedur maksimasi.
Contoh Pemrograman Matlab
Suatu fungsi kuadrat sebagai berikut:
432 xxxfy
Ingin dicari nilai minimum fungsi dengan metode Golden Section
Penyelesaian :
Apabila fungsi tersebut digambarkan maka akan diperoleh profil sebagai berikut:
Gambar 3. Profil fungsi y=f(x)
Langkah perhitungannya adalah sebagai berikut:
1. Mulai program
2. Masukkan interval minimasi perhitungan xA dan xB, dan nilai l dan nilai toleransi tolfun
3. Hitung nilai (xB-xA)
4. Buat looping while (xB-xA) > tolfun maka
a. Hitung nilai xP dan xQ dengan persamaan (1) dan (2)
b. Hitung nilai yP dan yQ dengan persamaan yang diberikan pada soal (dinyatakan
sebagai subprogram)
c. Bandingkan nilai yP dan yQ untuk prosedur minimasi
i. Jika yP<yQ maka ganti titik Q
1. xB=xQ
2. xQ=xP
3. xA=xA
4. xP dihitung dengan persamaan (1)
ii. Jika yP>yQ maka ganti titik P
1. xA=xP
2. xP=xQ
3. xB=xB
4. xQ dihitung dengan persamaan (2)
d. Hitung nilai (xB-xA) baru
e. Apakah nilai (xB-xA) baru memenuji kriteria tolfun?
i. Jika Ya maka perhitungan lanjut ke langkah 5
ii. Jika Tidak maka perhitungan kembali ke langkah 4
5. Hitung nilai xoptimum dengan persamaan xopt=(xA+xB)/2
6. Hitung nilai yoptimum dengan subprogram
7. Tampilkan hasil perhitungan
8. Selesai
Blok algoritma programnya ditampilkan pada Gambar 4.
Programnya adalah sebagai berikut:
function maingolden clc clear % input data xA=-10; xB=10; % pastikan xB lebih besar dari xA! tolfun=1e-4; lamb=(sqrt(5)-1)/2; % memulai perhitungan diff=(xB-xA); % looping while iter=0; % untuk menghitung jumlah looping while diff>tolfun iter=iter+1; % menentukan titik evaluasi P dan Q xP=xA+(1-lamb)*(xB-xA); xQ=xA+lamb*(xB-xA); % menghitung nilai y pada titik P dan Q yP=subgolden(xP); yQ=subgolden(xQ);
% eleminasi interval : proses minimasi if yP<yQ % ganti Q xB=xQ; xQ=xP; xA=xA; xP=xA+(1-lamb)*(xB-xA); else % ganti P xA=xP; xP=xQ; xB=xB; xQ=xA+lamb*(xB-xA); end % menghitung diff untuk proses looping diff=(xB-xA); end % menghitung hasil minimasi xopt=(xA+xB)/2; yopt=subgolden(xopt); % menampilkan hasil fprintf('Titik minimum adalah (%6.4f,%6.4f) \n',xopt,yopt)
function y=subgolden(x) y=x^2+3*x-4;
Hasil Program :
Titik minimum adalah (-1.5000,-6.2500)
Secara analitis titik minimum dapat ditentukan dengan menurunkan persamaan
432 xxxfy sebagai berikut :
032 xx'f'y
2
3x
Nilai minimum diperoleh dengan memasukkan nilai x tersebut ke persamaan y=f(x)
42
33
2
3
2
32
fy
4
25
4
16
4
18
4
9y
titik minimum fungsi
4
25
2
3,
Dari hasil analitis tersebut dapat dilihat bahwa metode golden section memberikan hasil yang
sama dengan hasil analitis.
Hitung nilai diff=xB-xA
Input data
xA,xB,
tolfun,lamb
Mulai
loop while diff>tolfun
Hitung nilai xP dan xQ dengan
persamaan (1) dan (2)
Hitung nilai yP dan yQ dengan
subprogram
Subprogram y=f(x)
y=x2+3x-4
yP<yQ?
xB=xQ
xQ=xP
xA=xA
Hitung xP dengan persamaan (1)
xA=xP
xP=xQ
xB=xB
Hitung xQ dengan persamaan (2)
Hitung nilai xopt dan yopt
Tampilkan hasil
hitungan
Selesai
diff<tolfun?
Hitung nilai diff=xB-xA
x
y
Ya Tidak
Ya
Tidak
Gambar 4. Algoritma Golden Section
2. Metode Optimasi dengan Toolbox Matlab
Untuk menyelesaikan sebuah permasalahan yang menyangkut optimasi baik itu
minimasi ataupun maximasi dengan menggunakan pemrograman matlab, maka dapat
menggunakan tools berupa fminsearch dan fminbnd. Perbedaan mendasar dari kedua
tools tersebut terletak pada jumlah variabel yang akan dioptimasi. fminbnd merupakan tools
untuk minimasi satu variabel pada interval tertentu sementara fminsearch digunakan untuk
minimasi satu atau beberapa variabel.
Sintaks untuk fminsearch adalah sebagai berikut : x = fminsearch(fun,x0)
Dengan x merupakan hasil dari minimasi pada sekitar nilai awal x0 dan fun adalah function yang
memuat persamaan yang diminimasi. Sintaks untuk fminbnd adalah sebagai berikut :
x = fminbnd(fun,x1,x2)
x merupakan hasil minimasi dari suatu fungsi pada fun pada interval antara x1 dan x2.
Untuk memahami penggunaan fminbnd, dan fminsearch silakan lakukan latihan berikut : Sebuah persamaan kuadrat sebagai berikut : f(x)=12x2-15x+2 a. ingin dicari nilai optimum fungsi dari persamaan tersebut! (gunakan fminsearch!) b. Jika permasalahan tersebut diubah dengan memberikan batas nilai berupa x1=0 dan x2=10
berapa nilai optimum fungsi tersebut? (selesaikan dengan menggunakan fminbnd) Penyelesaian
Algoritma perhitungan untuk soal a ditampilkan pada Gambar 5 sedangkan algoritma
untuk soal b ditampilkan pada 6. Dari kedua gambar tersebut dapat dilihat bahwa subroutine
yang diselesaikan sama sehingga persamaan yang akan diselesaikan dapat dibuat dalam 1 m-file
tersendiri. Langkah pemrograman dapat dibagi menjadi dua tahap yaitu :
a. Penulisan kode program untuk subprogram persamaan b. Penulisan kode main program untuk fminsearch, fminbnd
Input
Data
x0
Optimasi fungsi dengan fminsearch
[x,fval]=fminsearch(@fun_kuadrat,x0)
Function y=fun_kuadrat(x)
y=12x2-15x+1
y min?
Tampilkan
hasil
Selesai
Mulai
ya
tidak
Gambar 5. Algoritma perhitungan dengan fminsearch
Input
Data
x1,x2
Optimasi fungsi dengan fminbnd
[x,fval]=fminbnd(@fun_kuadrat,x1,x2)
Function y=fun_kuadrat(x)
y=12x2-15x+1
y<tolFun?
Tampilkan
hasil
Selesai
Mulai
ya
tidak
Gambar 6. Algoritma perhitungan dengan fminbnd
Penulisan kode subprogram function y=fun_kuadrat(x) % menuliskan subprogram y=12*x^2-15*x+1;
Penulisan kode main program untuk fminsearch
x0=10;
[xs,fval1]=fminsearch (@fun_kuadrat,x0)
Penulisan kode main program untuk fminbnd
x1=0
x2=10;
[xb,fval2]=fminbnd (@fun_kuadrat,x1,x2)
Hasil perhitungan program :
xs = 0.6250
fval1 = -3.6875
xb = 0.6250
fval2 = -3.6875
Minimasi dengan fminsearch untuk fungsi multivariabel Sebuah persamaan polynomial dengan dua variabel, x1 dan x2 sebagai berikut : f(x1,x2)=50(x2-2x1
2)2+(1-3x1)2
ingin dicari nilai minimum fungsi dari persamaan tersebut. Gunakan nilai awal x1=0 dan x2=1 Penyelesaian Karena ada dua variabel yang ingin diminimasi maka akan digunakan tools fminsearch. Program akan dibagi menjadi dua bagian. Bagian pertama adalah fun_poly (subroutine) yang mengandung persamaan yang ingin diminimasi. Bagian kedua adalah program utama yang mengandung fminsearch dan akan memanggil
fun_poly.
Input Data
x0=[x10 x20]
Minimasi fungsi dengan fminsearch
[x,fval]=fminsearch(@fun_poly,x0)
Function y=fun_poly(x)
y=50(x2-2x1)2+(1-3x1)2
y<tolFun?
Tampilkan
hasil
Selesai
Mulai
ya
tidak
Gambar 7. Algoritma perhitungan untuk minimasi multivariabel.
Input data pada program akan berupa nilai awal x0. Dalam kasus ini akan diperlukan dua nilai awal untuk menyelesaikan fungsi tersebut. Akan tetapi tools fminsearch hanya menyediakan satu argument untuk nilai awal sehingga kita akan buat nilai awal dalam bentuk array seperti berikut : x0=[0,1];
Bagian subroutine akan kita mulai dengan mendefinisikan argument in dan argument out terlebih dahulu. Dari sintaks fminsearch kita peroleh bahwa argument in yang tersedia berupa nilai x0 dan argument out berupa hasil hitungan dari persamaan (f(x1,x2)) maka pada definisi function kita buat sebagai berikut : function f=fun_poly(x)
x1=x(1); %Untuk memudahkan dalam pemrograman kita definisikan
kembali nilai x0 dalam subroutine pers_poly
x2=x(2); %x1 dan x2
%fungsi utama yang akan diselesaikan :
f=50.*(x2-2*x1.^2).^2+(1-3*x1).^2;
Bagian main program kurang lebih sebagai berikut : x=fminsearch(@fun_poly,x0)
fprintf(‘x1 = %6.3f \n’,x(1))
fprintf(‘x2 = %6.3f \n’,x(2))
hasil perhitungan adalah sebagai berikut
x1 = 0.333
x2 = 0.222
TUGAS 6 PEMROGRAMAN KOMPUTER
STTN BATAN
Suatu reaksi AB dijalankan dalam suatu reaktor batch. Diperoleh data konsentrasi A tiap
waktu adalah sebagai berikut :
Waktu, menit Konsentrasi A, mol/L
0 10
10 5.8
20 3.9
30 2
40 1.4
50 0.8
60 0.5
Dari data percobaan tersebut akan ditentukan konstanta laju reaksi (k) dengan metode
minimasi terhadap nilai jumlah kuadrat dari kesalahan/ sum of square of error (SSE) yang
didefinisikan sebagai berikut:
N
ielmodAAdata CCSSE
1
2 (A)
dengan i merupakan nomor data. CA merupakan konsentrasi A. indeks data merujuk pada data
percobaan yang diperoleh dari reaktor sedangkan model merujuk pada model matematis yang
diajukan untuk memprediksi laju pengurangan konsentrasi A. Dari hasil studi referensi
dipercaya bahwa reaksi tersebut memiliki order reaksi 1 terhadap A sehingga diajukan model
berbasis neraca massa dan kinetika reaksi sebagai berikut:
AA kC
dt
dC (B)
t merupakan waktu dan k adalah konstanta laju reaksi. Persamaan (B) tersebut diintegrasikan
secara analitis sehingga diperoleh persamaan sebagai berikut :
ktexpCC AelmodA 0 (C)
CA0 merupakan konsentrasi A pada waktu mula-mula (t=0). Oleh karena nilai CA0 dan t telah
diketahui maka CAmodel dapat dihitung dari persamaan (C). Oleh karena CAdata telah diketahui
maka nilai SSE pada persamaan (A) dapat terhitung apabila diberikan nilai k yang tertentu. Nilai
SSE kemudian diminimasi dengan cara mentrial nilai k sehingga diperoleh nilai SSE yang paling
minimum.
Tentukan nilai konstanta laju reaksi k dengan metode :
a. Golden Section
b. fminbnd
c. fminsearch
Gunakan nilai batas k sebesar 0.001 dan 1 untuk metode Golden Section dan fminbnd!.
Tentukan nilai parameter lainnya secara mandiri. Sertakan juga algoritma pemrograman yang
digunakan.
Syarat Pengumpulan Tugas
1. Tugas dikumpulkan paling lambat tanggal : 5 Mei 2014
2. Tugas dikumpulkan dalam bentuk soft copy berupa:
a. diagram algoritma
b. copy kode matlab
c. hasil run
a, b, dan c ditulis dalam 1 file MS word (bukan terpisah)
dikirim ke email [email protected].
3. Penulisan nama file softcopy (MS word) : Tugas6 Nama
4. Tuliskan pada subject email : Tugas6 Nama
Hasil Tugas :
Metode Golden Section
===============================================
iter kA kB fsse(kA) fsse(kB)
===============================================
1 0.0010 1.0000 3.34e+002 5.57e+001
2 0.0010 0.6184 3.34e+002 5.55e+001
3 0.0010 0.3826 3.34e+002 5.32e+001
4 0.0010 0.2368 3.34e+002 4.50e+001
5 0.0010 0.1468 3.34e+002 2.98e+001
6 0.0010 0.0911 3.34e+002 1.22e+001
7 0.0354 0.0911 7.01e+000 1.22e+001
8 0.0354 0.0698 7.01e+000 4.29e+000
9 0.0354 0.0567 7.01e+000 7.14e-001
10 0.0435 0.0567 1.33e+000 7.14e-001
~ ~ ~ ~ ~
22 0.0507 0.0507 1.66e-001 1.66e-001
23 0.0507 0.0507 1.66e-001 1.66e-001
24 0.0507 0.0507 1.66e-001 1.66e-001
25 0.0507 0.0507 1.66e-001 1.66e-001
26 0.0507 0.0507 1.66e-001 1.66e-001
27 0.0507 0.0507 1.66e-001 1.66e-001
28 0.0507 0.0507 1.66e-001 1.66e-001
29 0.0507 0.0507 1.66e-001 1.66e-001
===============================================
Nilai k dengan metode golden section = 0.0507
Nilai sse dengan metode golden section = 1.66e-001
Nilai k dengan metode fminbnd = 0.0507
Nilai sse dengan metode fminbnd = 1.66e-001
Nilai k dengan metode fminsearch = 0.0507
Nilai sse dengan metode fminsearch = 1.66e-001