• Tidak ada hasil yang ditemukan

Monte Carlo Sebagai Metode Pencarian Acak. Achmad Basuki

N/A
N/A
Protected

Academic year: 2021

Membagikan "Monte Carlo Sebagai Metode Pencarian Acak. Achmad Basuki"

Copied!
30
0
0

Teks penuh

(1)

Monte Carlo Sebagai Metode

Pencarian Acak

Achmad Basuki

(2)

Teknik Pencarian Acak

• Teknik pencarian solusi dengan

membangkitkan atau mendapatkan

solusi secara acak yang dilakukan

berkali-kali hingga akhir ditemukan

solusi yang diinginkan.

• Baik tidaknya hasil dari pencarian acak

tergantung pada nilai acuan yang

diberikan apakah yang dicari nilai

tertentu, nilai maksimal dan nilai

minimal.

(3)

Model Pencarian Acak

• Pencarian Acak Dengan Nilai Target

• Pencarian Acak Tanpa Nilai Target

Pencarian dilakukan hingga diperoleh nilai yang sama atau

mendekati nilai target yang diberikan, sehingga akurasi

pencarian ini ditentukan oleh kesamaan dengan nilai

target. Beberapa contoh persoalan seperti pencarian angka

atau kata yang disembunyikan, pencarian nilai fungsi yang

mendekati nilai tertentu f(x)=c, pencarian pola biner

dengan pembelajaran supervised.

Pencarian dilakukan hingga diperoleh nilai tertinggi, nilai

terendah atau error terkecil, karena tanpa nilai target maka

solusi saat ini selalu dibandingkan dengan solusi

sebelumnya untuk menunjukkan akurasi dari solusi.

Beberapa contoh persoalan seperti pembelajaran

(4)

Flowchart Pencarian Acak

Dengan Nilai Target

Mulai

Bangkitkan solusi secara acak x

Masukkan Nilai Target T

dan nilai toleransi ε

Bandingkan dengan nilai target

e = | f(x) – T |

e<ε

Bangkitkan solusi baru x

x adalah solusi yang dicari

Selesai

ya

(5)

Pencarian Acak Untuk Menebak Angka

Yang Disembunyikan Oleh Komputer

Angka yang

disembunyikan

12

Bangkitkan

bilangan

acak 0-20

3

8

15

4

5

10

15

12

|3-12| = 9

|8-12| = 4

|15-12| = 3

|4-12| = 8

|5-12| = 7

|10-12| = 2

|15-12| = 3

|12-12| = 0 Æ Ok

Penilaian terhadap

(6)

Listing Program Bahasa C:

Pencarian Acak Untuk Menebak Angka Yang

Disembunyikan Oleh Komputer

#include <stdlib.h> #include <fstream.h>

void main() {

int angkaTersembunyi, angkaTebakan; int sw,n;

// Memasukkan angka tersembunyi angkaTersembunyi=12;

// Mengulang tebakan sampai ketemu

// sw nilai yang menunjukkan sudah ketemu atau belum // sw=0 belum ketemu, dan sw=1 sudah ketemu

// n jumlah tebakan sw=0;

n=0;

while(sw==0) { n++;

// Mengacak tebakan baru

angkaTebakan=21*rand()/RAND_MAX;

cout << "Tebakan ke " << n << " adalah " ; cout << angkaTebakan << endl;

// Jika angka tebakan = angka tersembunyi maka // tebakan benar dan proses berhenti

if(angkaTebakan==angkaTersembunyi) sw=1; } } #include <stdlib.h> #include <fstream.h> void main() {

int angkaTersembunyi, angkaTebakan; int sw,n;

// Memasukkan angka tersembunyi

angkaTersembunyi=12;

// Mengulang tebakan sampai ketemu

// sw nilai yang menunjukkan sudah ketemu atau belum // sw=0 belum ketemu, dan sw=1 sudah ketemu

// n jumlah tebakan

sw=0; n=0;

while(sw==0) { n++;

// Mengacak tebakan baru

angkaTebakan=21*rand()/RAND_MAX;

cout << "Tebakan ke " << n << " adalah " ; cout << angkaTebakan << endl;

// Jika angka tebakan = angka tersembunyi maka // tebakan benar dan proses berhenti

if(angkaTebakan==angkaTersembunyi) sw=1; }

(7)

Pencarian Acak Untuk Menebak Kata Yang

Disembunyikan Oleh Komputer

Kata yang disembunyikan

EEPIS

Kata yang

dibangkitkan

secara acak

TGAPI

EPEIR

PEABU

ROTIA

EMBAN

IMPAS

EEPIS

Nilai numerik

dari kata acak

Nilai numerik target

dari urutan karakter

5 5 16 9 19

20 7 1 16 9

5 16 5 9 18

16 5 1 2 21

18 15 20 9 1

5 13 2 1 14

9 13 16 1 19

5 5 16 9 19

Error

5+2+15+7+10=39

0+11+11+0+1=23

11+0+15+7+2=35

13+10+4+0+18=45

0+8+14+4+5=31

4+8+0+9+0=21

0+0+0+0+0=0 Æ Ok

(8)

Listing Program Bahasa C:

Pencarian Acak Untuk Menebak Kata Yang

Disembunyikan Oleh Komputer [1]

#include <stdlib.h> #include <fstream.h> #include <math.h> void main() { int kataTarget[5]={5,5,16,9,19}; int kataAcak[5],iterasi,MaxIter=100,i,E; int kata[5],Emin;

// Mengacak kata sebagai solusi awal for(i=0;i<5;i++) kata[i]=26*rand()/RAND_MAX+1; // Menghitung Error Emin=0; for(i=0;i<5;i++) Emin+=abs(kata[i]-kataTarget[i]); for(iterasi=1;iterasi<=MaxIter;iterasi++){ // Mengacak kata for(i=0;i<5;i++) kataAcak[i]=26*rand()/RAND_MAX+1; // Menghitung Error E=0; for(i=0;i<5;i++) E+=abs(kataAcak[i]-kataTarget[i]); #include <stdlib.h> #include <fstream.h> #include <math.h> void main() { int kataTarget[5]={5,5,16,9,19}; int kataAcak[5],iterasi,MaxIter=100,i,E; int kata[5],Emin;

// Mengacak kata sebagai solusi awal

for(i=0;i<5;i++) kata[i]=26*rand()/RAND_MAX+1; // Menghitung Error Emin=0; for(i=0;i<5;i++) Emin+=abs(kata[i]-kataTarget[i]); for(iterasi=1;iterasi<=MaxIter;iterasi++){ // Mengacak kata for(i=0;i<5;i++) kataAcak[i]=26*rand()/RAND_MAX+1; // Menghitung Error E=0; for(i=0;i<5;i++) E+=abs(kataAcak[i]-kataTarget[i]);

(9)

Listing Program Bahasa C:

Pencarian Acak Untuk Menebak Kata Yang

Disembunyikan Oleh Komputer [2]

// Membandingkan Error if(E<Emin) { for(i=0;i<5;i++) kata[i]=kataAcak[i]; Emin=E; }

// Menampilkan hasil pencarian cout << iterasi << " : ";

for(i=0;i<5;i++) cout << char(kata[i]+64); cout << " Error = " << Emin << endl;

} } // Membandingkan Error if(E<Emin) { for(i=0;i<5;i++) kata[i]=kataAcak[i]; Emin=E; }

// Menampilkan hasil pencarian

cout << iterasi << " : ";

for(i=0;i<5;i++) cout << char(kata[i]+64); cout << " Error = " << Emin << endl;

} }

(10)

Flowchart Pencarian Acak

Tanpa Nilai Target Untuk Mencari

Nilai Maksimal

Mulai

Bangkitkan solusi secara acak x

Masukkan nilai kriteria stop

Hitung f(x) dan simpan sebagai nilai maksimal

FmaksÅf(x) dan xMinÅx

f(x)>Fmaks

Bangkitkan solusi baru x

x adalah solusi yang dicari

Selesai

Hitung f(x)

Fmaks Å f(x) dan xMinÅx

1

1

tidak ya

kriteria

stop ?

2

tidak ya

(11)

Pencarian Acak Untuk Mencari Nilai

Maksimal F(x)

Fungsi

y=f(x)

Nilai x yang

dibangkitkan

secara acak

Nilai F(x)

Contoh fungsi

)

2

cos(

)

(

x

xe

3

x

f

=

x

0.2886 0.10175 0.8139 -0.00403 0.0374 0.03336 0.0269 0.02475 0.5846 0.03955 0.8306 -0.00621 0.3238 0.09776 0.5135 0.05693 0.5248 0.05412 0.8528 -0.00887 0.2413 0.10363 0.8528 -0.00887

solusi

-0.04000 -0.02000 0.00000 0.02000 0.04000 0.06000 0.08000 0.10000 0.12000 0.00 00 0.10 00 0.20 00 0.30000.40 00 0.50 00 0.60 00 0.70000.80 00 0.90 00 1.00 00

Nilai maksimal

Nilai f(x) yang

paling besar

(12)

Listing Program Bahasa C:

Pencarian Acak Untuk Mencari Nilai Maksimal F(x)

#include <stdlib.h> #include <math.h> #include <fstream.h> float fungsi(float u){

return (float)(u*exp(-3*u)*cos(2*u)); }

void main() {

float x,y,xMaks,yMaks; int iterasi, MaxIter=100;

// Inisialisasi Solusi

xMaks=(float)rand()/RAND_MAX; yMaks=fungsi(xMaks);

for(iterasi=1;iterasi<=MaxIter;iterasi++){

// Mengacak Solusi Baru

x=(float)rand()/RAND_MAX; y=fungsi(x);

if(y>yMaks) {

xMaks=x; yMaks=y; }

cout << iterasi << ": f(" << xMaks; cout << ") = " << yMaks << endl;

} }

(13)

Flowchart Pencarian Acak

Tanpa Nilai Target Untuk Mencari

Nilai Minimal

Mulai

Bangkitkan solusi secara acak x

Masukkan nilai kriteria stop

Hitung f(x) dan simpan sebagai nilai maksimal

FminÅf(x) dan XminÅx

f(x)<Fmin

Bangkitkan solusi baru x

Xmin adalah solusi yang dicari

Selesai

Hitung f(x)

Fmin Å f(x) dan XminÅx

1

1

tidak ya

kriteria

stop ?

2

tidak ya

(14)

-0.04000 -0.02000 0.00000 0.02000 0.04000 0.06000 0.08000 0.10000 0.12000 0.00000.20000.40000.60000.80001.00001.20001.40001.60001.80001.9500

Pencarian Acak Untuk Mencari Nilai

Minimal F(x)

Fungsi

y=f(x)

Nilai x yang

dibangkitkan

secara acak

Nilai F(x)

Contoh fungsi

)

2

cos(

)

(

x

xe

3

x

f

=

x

solusi

Nilai minimal

1.8826 -0.00539 1.6544 -0.01141 0.0671 0.05439 1.9757 -0.00363 1.1339 -0.02425 0.0182 0.01722 1.4709 -0.01748 0.0641 0.05242 0.0664 0.05390 1.1119 -0.02404 1.9180 -0.00467

Nilai f(x) yang

paling kecil

(15)

Listing Program Bahasa C:

Pencarian Acak Untuk Mencari Nilai Minimal F(x)

#include <stdlib.h> #include <math.h> #include <fstream.h> float fungsi(float u){

return (float)(u*exp(-3*u)*cos(2*u)); }

void main() {

float x,y,xMin,yMin;

int iterasi, MaxIter=100;

// Inisialisasi Solusi

xMin=(float)rand()/RAND_MAX; yMin=fungsi(xMin);

for(iterasi=1;iterasi<=MaxIter;iterasi++){

// Mengacak Solusi Baru

x=(float)rand()/RAND_MAX; y=fungsi(x);

if(y<yMin) {

xMin=x; yMin=y; }

cout << iterasi << ": f(" << xMin; cout << ") = " << yMin << endl;

} }

(16)

Pencarian Acak Untuk Mencari Akar

Persamaan Transendental

Persamaan transedental

y=f(x)

Nilai x yang

dibangkitkan

secara acak

Nilai F(x)

Contoh persamaan

yang diselesaikan

)

2

cos(

)

(

x

xe

3

x

f

=

x

0.2886 0.10175 0.8139 -0.00403 0.0374 0.03336 0.0269 0.02475 0.5846 0.03955 0.8306 -0.00621 0.3238 0.09776 0.5135 0.05693 0.5248 0.05412 0.8528 -0.00887 0.2413 0.10363 0.8528 -0.00887

solusi

-0.04000 -0.02000 0.00000 0.02000 0.04000 0.06000 0.08000 0.10000 0.12000 0.00 00 0.10 00 0.20 00 0.30000.40 00 0.50 00 0.60 00 0.70000.80 00 0.90 00 1.00 00

akar

Nilai f(x) yang

paling dekat

dengan nol

(17)

Listing Program Bahasa C:

Pencarian Acak Untuk Mencari Akar Persamaan

#include <stdlib.h> #include <math.h> #include <fstream.h> float fungsi(float u){

return (float)(u*exp(-3*u)*cos(2*u)); }

void main() {

float x,y,xMin,yMin;

int iterasi, MaxIter=100;

// Inisialisasi Solusi

xMin=(float)rand()/RAND_MAX; yMin=fabs(fungsi(xMin));

for(iterasi=1;iterasi<=MaxIter;iterasi++){

// Mengacak Solusi Baru

x=(float)rand()/RAND_MAX; y=fabs(fungsi(x));

if(y<yMin) {

xMin=x; yMin=y; }

cout << iterasi << ": f(" << xMin; cout << ") = " << yMin << endl;

} }

(18)

Monte Carlo Sebagai Metode

Pancarian Acak

• Metode pencarian acak (random walk)

mengganti semua kombinasi dengan

kombinasi yang baru hingga diperoleh

kombinasi terbaik. Hal ini menyebabkan

pencarian menjadi sangat lama atau bahkan

hasil yang diperoleh bukan hasil yang

optimal.

• Monte Carlo seperti halnya pencarian acak,

hanya saja penggantian dilakukan pada

sebagian elemen dari kombinasi solusi.

Penggantian bisa pencakan ulang atau

pergeseran. Hal ini merupakan ide yang

sangat baik.

(19)

Flowchart Metode Monte Carlo

Dengan Nilai Target

Mulai

Bangkitkan solusi secara acak x

Masukkan Nilai Target T

dan nilai toleransi ε

Bandingkan dengan nilai target

e = | f(x) – T |

e<ε

Bangkitkan solusi baru x

Dengan update sebagian dari nilai x

x adalah solusi yang dicari

Selesai

tidak ya

(20)

Listing Program Bahasa C:

Monte Carlo Untuk Menebak Kata Yang

Disembunyikan Oleh Komputer [1]

#include <stdlib.h> #include <fstream.h> #include <math.h> void main() { int kataTarget[5]={5,5,16,9,19}; int kataAcak[5],iterasi,MaxIter=100,i,E; int kata[5],Emin;

// Mengacak kata sebagai solusi awal for(i=0;i<5;i++) kata[i]=26*rand()/RAND_MAX+1; // Menghitung Error Emin=0; for(i=0;i<5;i++) Emin+=abs(kata[i]-kataTarget[i]); for(iterasi=1;iterasi<=MaxIter;iterasi++){ // Mengacak satu karakter dari kata i=5*rand()/RAND_MAX; kataAcak[i]=26*rand()/RAND_MAX+1; // Menghitung Error E=0; for(i=0;i<5;i++) E+=abs(kataAcak[i]-kataTarget[i]); #include <stdlib.h> #include <fstream.h> #include <math.h> void main() { int kataTarget[5]={5,5,16,9,19}; int kataAcak[5],iterasi,MaxIter=100,i,E; int kata[5],Emin;

// Mengacak kata sebagai solusi awal

for(i=0;i<5;i++) kata[i]=26*rand()/RAND_MAX+1; // Menghitung Error Emin=0; for(i=0;i<5;i++) Emin+=abs(kata[i]-kataTarget[i]); for(iterasi=1;iterasi<=MaxIter;iterasi++){

// Mengacak satu karakter dari kata i=5*rand()/RAND_MAX; kataAcak[i]=26*rand()/RAND_MAX+1; // Menghitung Error E=0; for(i=0;i<5;i++) E+=abs(kataAcak[i]-kataTarget[i]);

(21)

Listing Program Bahasa C:

Pencarian Acak Untuk Menebak Kata Yang

Disembunyikan Oleh Komputer [2]

// Membandingkan Error if(E<Emin) { for(i=0;i<5;i++) kata[i]=kataAcak[i]; Emin=E; }

// Menampilkan hasil pencarian cout << iterasi << " : ";

for(i=0;i<5;i++) cout << char(kata[i]+64); cout << " Error = " << Emin << endl;

} } // Membandingkan Error if(E<Emin) { for(i=0;i<5;i++) kata[i]=kataAcak[i]; Emin=E; }

// Menampilkan hasil pencarian

cout << iterasi << " : ";

for(i=0;i<5;i++) cout << char(kata[i]+64); cout << " Error = " << Emin << endl;

} }

Perbandingan Hasil Pencarian Acak dan Monte Carlo yaitu

pada pencapaian hasil optimal:

Pencarian acak Æ Tidak menghasilkan kata yang dicari

Monte Carlo Æ Mendapatkan hasil setelah ±1000 iterasi.

(22)

Flowchart Pencarian Acak

Tanpa Nilai Target Untuk Mencari

Nilai Maksimal

Mulai

Bangkitkan solusi secara acak x

Masukkan nilai kriteria stop

Hitung f(x) dan simpan sebagai nilai maksimal

FmaksÅf(x) dan xMinÅx

f(x)>Fmaks

Update solusi x

xMin adalah solusi yang dicari

Selesai

Hitung f(x)

Fmaks Å f(x) dan xMinÅx

1

1

tidak ya

kriteria

stop ?

2

tidak ya

(23)

Listing Program Bahasa C:

Monte Carlo Untuk Mencari Nilai Maksimal F(x)

#include <stdlib.h> #include <math.h> #include <fstream.h> float fungsi(float u){

return (float)(u*exp(-3*u)*cos(2*u)); }

void main() {

float x,y,xMaks,yMaks; int iterasi, MaxIter=100;

// Inisialisasi Solusi

xMaks=(float)rand()/RAND_MAX; yMaks=fungsi(xMaks);

for(iterasi=1;iterasi<=MaxIter;iterasi++){

// Update Solusi Baru

x=Xmin+(float)rand()/RAND_MAX-0.5;

y=fungsi(x); if(y>yMaks) {

xMaks=x; yMaks=y; }

cout << iterasi << ": f(" << xMaks; cout << ") = " << yMaks << endl;

} }

(24)

Flowchart Pencarian Acak

Tanpa Nilai Target Untuk Mencari

Nilai Minimal

Mulai

Bangkitkan solusi secara acak x

Masukkan nilai kriteria stop

Hitung f(x) dan simpan sebagai nilai maksimal

FminÅf(x) dan XminÅx

f(x)<Fmin

Update solusi x

Xmin adalah solusi yang dicari

Selesai

Hitung f(x)

Fmin Å f(x) dan XminÅx

1

1

tidak ya

kriteria

stop ?

2

tidak ya

(25)

Listing Program Bahasa C:

Monte Carlo Untuk Mencari Nilai Minimal F(x)

#include <stdlib.h> #include <math.h> #include <fstream.h> float fungsi(float u){

return (float)(u*exp(-3*u)*cos(2*u)); }

void main() {

float x,y,xMin,yMin;

int iterasi, MaxIter=100;

// Inisialisasi Solusi

xMin=(float)rand()/RAND_MAX; yMin=fungsi(xMin);

for(iterasi=1;iterasi<=MaxIter;iterasi++){

// Mengacak Solusi Baru

x=Xmin+(float)rand()/RAND_MAX-0.5;

y=fungsi(x); if(y<yMin) {

xMin=x; yMin=y; }

cout << iterasi << ": f(" << xMin; cout << ") = " << yMin << endl;

} }

(26)
(27)
(28)
(29)
(30)

Referensi

Dokumen terkait

Inovasi teknologi PTKJS tidak seluruhnya diadopsi oleh petani jeruk di Kabupaten Sambas karena beberapa subkomponen teknologi seperti penggunaan perangkap kuning, penyiraman

Dari pemaparan di atas dapat disimpulkan anak-anak dalam menilai sebuah program televisi masuk dalam apresiasi yang tinggi dan penilaian kualitas tinggi sebagai program

Kegiatan yang dilakukan keluarga responden selain menggarap lahan adalah berburuh tani, perdagangan, industri, jasa, buruh non pertanian dan pendapatan lain dalam bentuk kiriman

Simpulan: Terdapat hubungan yang sangat bermakna antara infestasi cacing yang ditularkan melalui tanah dan eosinofilia Cacing yang paling banyak menginfestasi siswa SD GMIM

Aset keuangan pada awalnya diakui pada nilai wajar ditambah, dalam hal investasi tidak diukur pada nilai wajar melalui laporan laba rugi, biaya transaksi yang

Dari pengamatan selama tiga bulan, tidak terjadi perubahan warna rambut pada oposum layang dengan penambahan buah-buahan (pisang kepok, semangka, dan buah naga

Skripsi berjudul “Pengaruh Pengunaan Koil dan Busi Racing Dengan Variasi Bahan Bakar Terhadap Unjuk Kerja Mesin 4 Langkah ” telah diuji dan disahkan oleh

Kekerasan psikis yang dilakukan oleh orang tua kandung terhadap anaknya yaitu berupa perilaku yang ditujukan untuk mengintimidasi dan menganiaya anak, mengancam atau