Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
5.MONTE CARLO 5.1. Metode Monte Carlo 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. Metode pencarian acak ini menjadi tidak popular karena hasilnya memang tidak bagus, tetapi sudah merupakan konsep dasar yang menarik untuk dibahas. Ada beberapa hal yang perlu diperbaiki dari konsep pencarian acak ini, antara lain: Tidak semua nilai pada solusi harus diubah pada setiap iterasi. Bila sudah solusi mendekati target tidak perlu perubahan yang terlalu besar. Perlu pertimbangan bahwa munculnya bilangan acak sangat tergantung pada distribusi bilangan acak yang digunakan (lihat bab 4).
2
5.1. Metode Monte Carlo Metode Monte Carlo memperbaiki metode pencarian acak ini dengan mempertimbangkan kedua hal di atas, sehingga metode ini menjadi metode simulasi yang banyak digunakan. Metode Monte Carlo sebenarnya merupakan metode pencarian acak, tetapi dengan beberapa perbaikan, yaitu: 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. Beberapa impelementasi dasar dari Monte Carlo dalam proses simulasi adalah sebagai berikut: Metode Rejection pada pembangkitan bilangan acak yang berdistribusi non-uniform seperti telah dibahas pada bab 4. Menghitung nilai p. Menghitung nilai integral Pencarian Acak Dengan Monte Carlo
3
5.2. Monte Carlo Untuk 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
4
5.2. Monte Carlo Untuk Menghitung Nilai p
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: 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
5.2. Monte Carlo Untuk Menghitung Nilai p
% 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; fprintf('pi = %1.5f\n',mpi); Simpan dalam file hitungpi.m, kemudian jalankan program ini. Beberapa hasil dari program ini adalah:
6
5.2. Monte Carlo Untuk Menghitung Nilai p
Jumlah titik acak = 10 pi = Jumlah titik acak = 100 pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Jumlah titik acak = pi = Memang dibutuhkan jumlah titik yang besar untuk dapat mendekati nilai p yang sebenarnya. Tetapi ide ini merupakan ide dasar pencarian yang sangat bagus.
7
5.3. Monte Carlo Untuk Menghitung Integral
Persoalan menghitung integral adalah persoalan dasar dalam kalkulus, tetapi ternyata tidak semua fungsi dapat dihitung integralnya dengan mudah. 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
5.3. Monte Carlo Untuk Menghitung Integral
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<f(x) dengan f(x) didefinisikan Nilai integral dapat dihitung dengan : dimana : M=jumlah titik yang terletak di dalam fungsi f(x) N=jumlah titik yang dibangkitkan
9
5.3. Monte Carlo Untuk Menghitung Integral
Contoh 5.1. Menghitung nilai: 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; fprintf('Integral = %1.5f\n',L);
10
5.3. Monte Carlo Untuk Menghitung Integral
Simpan dalam file integral1.m, kemudian jalankan. Salah satu contoh hasilnya adalah sebagai berikut: Jumlah titik acak = 10 Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Jumlah titik acak = Integral = Hasil eksak dari nilai integral di atas adalah sebagai berikut:
11
5.4. Pencarian Acak (Random Walk)
Metode paling sederhana dalam menyelesaikan suatu permasalahan tanpa harus melibatkan banyak operasional matematis dan struktur data yang rumit adalah metode pencarian secara acak, dimana suatu 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=[xk ] dapat dituliskan sebagai berikut:
12
5.4. Pencarian Acak (Random Walk)
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
5.4. Pencarian Acak (Random Walk)
Contoh 5.1. Mencari nilai maksimum dari fungsi: dimana 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 mem-peroleh nilai maksimum dari fungsi f(x).
14
5.4. Pencarian Acak (Random Walk)
Contoh 5.1. Mencari nilai maksimum dari fungsi: dimana 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 mem-peroleh nilai maksimum dari fungsi f(x).
15
5.4. Pencarian Acak (Random Walk)
% 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 % Hasil fprintf('Iterasi %d : ',n); fprintf('Nilai maksimum %1.3f ',y); fprintf('terjadi di x = %1.3f\n',x);
16
5.4. Pencarian Acak (Random Walk)
Simpan program ini dalam file rndwalk1.m, dan hasil dari implementasi ini untuk setiap jumlah iterasi tertentu adalah sebagai berikut: Iterasi 10 : Nilai maksimum terjadi di x = 0.500 Iterasi 50 : Nilai maksimum terjadi di x = 0.499 Iterasi 100 : Nilai maksimum terjadi di x = 0.499 Nilai maksimal yang diperoleh adalah Contoh 5.2. Mencari kata acak sampai diperoleh kata yang disimpan oleh komputer, misalkan kata acaknya adalah ‘STATE’. Sebelumnya pastikan nilai target (kata yang disimpan) dibentuk dalam array integer sehingga didefinisikan: target = { }, dimana nilai-nilai tersebut menyatakan urutan dari alfabet pada kata target.
17
5.4. Pencarian Acak (Random Walk)
Implementasinya dalam bahasa MATLAB adalah: % Menyimpan kata target target=[ ]; katatarget=char(target+64); % Membuat kata secara acak s=floor(rand(1,5)*26)+1; % Menghitung jarak antara kata target dan s e=sum(abs(target-s)); % Proses iterasi pencarian sebanyak 300 kali for iterasi=1:300 % Menyimpan s ke dalam s1 s1=s; % Melakukan update dengan mengubah % salah satu huruf saja
18
5.4. Pencarian Acak (Random Walk)
k=floor(rand*5)+1; s1(k)=floor(rand*26)+1; % Menghitung jarak s1 dengan target e1=sum(abs(target-s1)); % Menguji apakah s baru diterima if(e1<=e) s=s1; e=e1; end % Setiap 20 iterasi ditampilkan if mod(iterasi,25)==0 kata=char(s+64); fprintf('Iterasi ke %d : %s\n',iterasi,kata);
19
5.4. Pencarian Acak (Random Walk)
Simpan dalam file carikata.m, lalu jalankan. Salah satu hasilnya adalah sebagai berikut: >> carikata Iterasi ke 25 : VUJTC Iterasi ke 50 : VUETC Iterasi ke 75 : VUATE Iterasi ke 100 : UTATE Iterasi ke 125 : QTATE Iterasi ke 150 : QTATE Iterasi ke 175 : STATE Iterasi ke 200 : STATE Iterasi ke 225 : STATE Iterasi ke 250 : STATE Iterasi ke 275 : STATE Iterasi ke 300 : STATE
20
5.4. Pencarian Acak (Random Walk)
Tugas 3.2. Buat program sederhana dalam MATLAB untuk meng-hitung nilai integral : untuk x = 0 s/d 1 2. Buatlah grafik yang menghubungkan jumlah titik yang dibangkitkan dan nilai integral yang diperoleh.
21
5.6. Algoritma Metropolis Sampel data yang diperoleh dengan konfigurasi spin dari lattice diletakkan pada suatu kesatuan. Kita pilih data yang mempunyai bobot w, dimana Hi adalah energi pada konfigurasi i, teknik ini dinamakan dengan algoritma Metropolis. Hal ini berguna untuk memilih kandidat berikutnya pada proses pencarian acak (random walk), dimana konfigurasi solusi yang dapat diterima adalah konfigurasi solusi dengan bobot: Bila proses ini dilakukan secara terus-menerus akan diperoleh kumpulan data sampling yang mempunyai distribusi:
22
5.6. Algoritma Metropolis Contoh 5.3. Bangkitkan 10 bilangan acak [-1 1] yang menyatakan komposisi elektron dari suatu atom. Misalkan: S = [1 1 –1 1 –1 –1 – –1] Energi yang terpancar dalam suatu komposisi elektron adalah energi yang terjadi ketika terjadi dua kutub yang berbeda yang berada secara berdampingan. Energi untuk S dapat dihitung dengan: S = [ – –1 –1 – –1] dE = [ ] Total Energi E=5. Algoritma metropolis bersama-sama random walk dari Monte Carlo akan mengubah komposisi di atas menjadi komposisi dengan Energi yang minimum.
23
5.6. Algoritma Metropolis Proses 1: Nomor state yang berubah = 3
dE’ = [ ] Total Energi E = 3 State ini diterima Proses 2: Nomor state yang berubah = 5 S’ = [ –1 – –1] dE’ = [ ] Proses 3: Nomor state yang berubah = 6 S’ = [ – – –1] dE’ = [ ] Total Energi E = 5 State ini tidak diterima
24
5.6. Algoritma Metropolis Proses di atas hanya melakukan pertimbangan perubahan state dilakukan ketika energi lebih kecil. Perhatikan pada proses 1 dan proses 2, meskipun kedua state ini berbeda tetapi energinya sama. Hal ini membuat teknik perubahan state hanya dengan pertimbangan besar-kecilnya energi masih terlalu dini untuk dapat menyatakan kondisi terbaik. Contoh Implementasi Algoritma Metropolis: Algoritma metropolis untuk membangkitkan sejumlah bilangan acak xk dengan distribusi f(xk). Bangkitkan N pasangan bilangan acak (x,y) Untuk Xn=xn Hitung ratio Metropolis dari masing-masing pasangan bilangan acak: Tentukan :
25
5.6. Algoritma Metropolis Contoh 5.4.
Membangkitkan bilangan acak berdistribusi exponensial : , untuk 0 < x < 1 Implementasi Algoritma Metropolis untuk membangkitkan bilangan acak dengan distribusi eksponensial di atas adalah sebagai berikut: % Memasukkan jumlah bilangan acak % yang akan dibangkitkan n=input('Jumlah bilangan acak = '); % Membangkitkan n pasangan bilangan acak (x,y) for i=1:n x=rand; y=rand; % Menghitung nilai ratio metropolis fx=exp(-x)/0.4323; fy=exp(-y)/0.4323; r=fy./fx; p=rand;
26
5.6. Algoritma Metropolis if p<r s(i)=y; else s(i)=x; end disp(s) Simpan dalam file acakmet.m, kemudian jalankan. Perhatikan hasil dari pembangkitan bilangan acak dengan algoritma metropolis. Untuk membangkitkan bilangan acak dengan fungsi distribusi yang berbeda, tinggal mengganti fx dan fy pada program di atas.
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.