METODE MONTE CARLO Presented by Muchammad Chusnan Aprianto Dr.KHEZ Muttaqien Istitute of Technology
1
M
O
N
T
E
C
A
R
L
O
• Metode pencarian acak adalah suatu metode dimana solusi dicari secara acak dan diulang-ulang sampai dihasilkan solusi yang diharapkan. • Misalkan dicari suatu angka antara 0 sampai dengan 100, maka akan diacak angka-angka antara 0 dan 100 sampai didapatkan angka yang dimaksud. • Metode ini tampak sangat sederhana, karena hanya diperlukan bagaimana suatu solusi dinyatakan dan kemudian mengacak nilainya hingga diperoleh nilai yang diharapkan dari model solusi yang ada. 2
Metode Monte Carlo • Metode Monte Carlo memperbaikai pencairian acak ini. • Tidak semua nilai pada solusi diacak ulang, tetapi dipilih satu nilai saja di antara barisan nilai solusi, dan kemungkinan acak dari setiap kejadian solusi. • Sebagai contoh, pada pencarian kata setiap iterasi hanya mengubah satu nilai saja dari kelima nilai yang ada dalam satu solusi. Bila pada solusi hanya mengandung satu nilai saja maka metode Monte Carlo ini sama dengan metode pencarian acak. • Penerapan Metode Monte Carlo • Menghitung nilai p • Menghitung nilai integral • Pencarian Acak Dengan Monte Carlo
3
Menghitung Nilai p • Perhatikan lingkaran dengan jari-jari 1, maka dapat dikatakan bahwa luas lingkaran tersebut adalah p. • Bila kita mengacak pasangan (x,y) dengan bilangan acak [0,1] maka kita cukup memandang pada kuadran I pada bujursangkar luar dari lingkaran berjari-jari 1 maka kemungkinan titik (x,y) berada dalam lingkaran adalah: 1
-1
1
-1
4
Cont’d • Dengan kata lain bila dibangkitkan N pasang pasangan korrdinat (x,y) dengan bilangan acak [0,1] maka ada m=Np/4 pasangan yang berada dalam lingkaran pada kuadran I. Aturan ini bisa dikatakan bahwa, nilai p dapat dihitung dengan:
4m p N • dimana m adalah jumlah titik acak [0,1] yang masuk dalam lingkaran, dan N adalah jumlah titik yang dibangkitkan. • Implementasi Monte Carlo untuk menghitung nilai p dalam MATLAB adalah sebagai berikut: 5
Cont’d % Memasukkan jumlah titik yang diacak n=input('Jumlah titik acak = '); % Mengacak n buah titik x=rand(1,n); y=rand(1,n); % Menghitung jumlah titik % yang masuk daerah lingkaran p=(y<(1-x.^2).^0.5); m=sum(p); % Menghitung dan menampilkan nilai pi mpi=4*m/n; Pi=mpi
6
Cont’d Jumlah titik acak = 10 Jumlah titik acak = 100 Jumlah titik acak = 1000 Jumlah titik acak = 2000 Jumlah titik acak = 2500 Jumlah titik acak = 4000 Jumlah titik acak = 10000 Jumlah titik acak = 20000 Jumlah titik acak = 50000 Jumlah titik acak = 100000 Jumlah titik acak = 250000 Jumlah titik acak = 500000 Jumlah titik acak = 1000000 •
pi = 3.20000 pi = 2.88000 pi = 3.15200 pi = 3.13800 pi = 3.11840 pi = 3.12800 pi = 3.15760 pi = 3.12640 pi = 3.13600 pi = 3.13876 pi = 3.14133 pi = 3.14120 pi = 3.14156
Diperlukan jumlah titik yang besar untuk dapat mendekati nilai p yang sebenarnya. Tetapi ide ini merupakan ide dasar pencarian yang sangat bagus. 7
Menghitung integral • Metode Monte Carlo dapat digunakan untuk menghitung integral dengan menghitung jumlah titik yang berada di dalam suatu kawasan fungsi f(x) pada interval yang ditentukan.
8
Cont’d •
Untuk menghitung integral f(x) dari [a,b] dengan menggunakan metode Monte Carlo, maka dibangkitkan pasangan (x,y) secara acak dengan nilai x=[a,b] dan nilai y=[0,1], Hitung jumlah titik (x,y) dimana y
Nilai integral dapat dihitung dengan :
M I N
dimana : M=jumlah titik yang terletak di dalam fungsi f(x) N=jumlah titik yang dibangkitkan
9
Cont’d Contoh: Menghitung nilai: •
1
x x . e dx
0 Implementasi Monte Carlo untuk menghitung integral di atas dalam MATLAB adalah:
% Memasukkan jumlah titik yang diacak n=input('Jumlah titik acak = '); % Mengacak n buah titik x=rand(1,n); y=rand(1,n); % Menghitung jumlah titik % yang masuk daerah integral fungsi p=(y<x.*exp(-x)); m=sum(p); % Menghitung dan menampilkan nilai integral L=m/n 10
Cont’d Hasil Iterasi Bilangan Random Jumlah titik acak = 10 Jumlah titik acak = 1000 Jumlah titik acak = 1500 Jumlah titik acak = 2000 Jumlah titik acak = 5000 Jumlah titik acak = 10000 Jumlah titik acak = 50000 Jumlah titik acak = 100000 Jumlah titik acak = 500000 Jumlah titik acak = 1000000
Integral = 0.40000 Integral = 0.26800 Integral = 0.24800 Integral = 0.26950 Integral = 0.26440 Integral = 0.26470 Integral = 0.26316 Integral = 0.26270 Integral = 0.26416 Integral = 0.26451
Hasil eksak dari nilai integral di atas adalah sebagai berikut: 1
xe dx xe x
x
e
e
x 1 0
1
e 1 1 0.2642
0 11
Pencarian Acak (Random Walk) • Sederhana, tanpa pemikiran matematis yang rumit • Penyelesaian diperoleh dengan mencoba-coba (trial and error) dengan memanfaatkan bilangan acak. • Misalkan untuk mencari nilai terbesar dari f(x,y)=x*exp(y) dapat dihitung dengan mengacak pasangan nilai (x,y), dan hitung nilai f(x,y), kemudian acak lagi pasangan nilai (x,y) dan hitung nilai f(x,y), bila f(x,y) yang baru lebih besar dicatat demikian seterusnya sehingga diperoleh f(x,y) yang paling besar. • Algoritma dari pencarian acak untuk mencari nilai maksimal suatu fungsi f(x) dari barisan nilai x=[x,k] dapat dituliskan sebagai berikut: 12
Cont’d • Acak satu penyelesaian x yang mungkin. • Hitung nilai fungsi dari penyelesaian tersebut f(x) anggap sebagai f_maksimal • Acak lagi satu penyelesaian yang mungkin, dengan mengubah satu atau beberapa bagian kejadian pada ruang solusi. • Hitung nilai fungsi dari penyelesaian tersebut f(x) • Bila f(x)>f_maksimal maka f_maksimal=f(x) • Ulangi langkah 2 sampai dinyatakan stop dengan kriteria stop yang ditentukan. Kriteria stop yang banyak dilakukan adalah jumlah iterasi atau nilai maksimal acuan. 13
Cont’d (Contoh) Mencari nilai maksimum dari fungsi: dimana 0 x 2
f ( x) xe
2 x
Sebelum mencari penyelesaiannya sebaiknya terlebih dahulu digambarkan fungsi ini dengan cara: >> x=0:0.1:2; >> y=x.*exp(-2*x); >> plot(x,y), grid Dari grafik di atas, terlihat bahwa nilai maksimum sekitar 0.18 sampai dengan 2, yang terjadi di nilai x sekitar 0.4 sampai dengan 0.6. Implementasi pencarian acak dalam MATLAB untuk memperoleh nilai maksimum dari fungsi f(x).
14
Cont’d % Memasukkan jumlah iterasi n=input(‘Jumlah iterasi = ‘); % Pengacakan nilai awal x=rand; y=x*exp(-2*x); % Random walk dengan n iterasi for iterasi=1:n x1=rand; y1=x1*exp(-2*x1); if y1>y x=x1; y=y1; end end % Hasil fprintf('Iterasi %d : ',n); fprintf('Nilai maksimum %1.3f ',y); fprintf('terjadi di x = %1.3f\n',x);
15
Cont’d Hasil Script: Iterasi 10 : Nilai maksimum 0.184 terjadi di x = 0.500 Iterasi 50 : Nilai maksimum 0.184 terjadi di x = 0.499 Iterasi 100 : Nilai maksimum 0.184 terjadi di x = 0.499 Nilai maksimal yang diperoleh adalah 0.184.
16
SEKIAN
[email protected] 081802695530
18