Monte Carlo

Membangkitkan Bilangan Acak Menggunakan Matlab

TeknikPencarianAcak

•Teknikpencariansolusidenganmembangkitkanataumendapatkansolusisecaraacakyang dilakukanberkali-kali hinggaakhirditemukansolusiyang diinginkan.

•Baiktidaknyahasildaripencarianacaktergantungpadanilaiacuanyang diberikanapakahyang dicarinilaitertentu, nilaimaksimaldan minimal.nilai

Model PencarianAcak•PencarianAcakDenganNilaiTarget•PencarianAcakTanpaNilaiTargetPencariandilakukanhinggadiperolehnilaiyang sama ataumendekatinilaitarget yang diberikan, sehinggaakurasipencarianiniditentukanolehkesamaandengannilaitarget. Beberapacontohpersoalansepertipencarianangkaataukatayang disembunyikan, pencariannilaifungsiyang mendekatinilaitertentuf(x)=c, pencarianpolabinerdenganpembelajaransupervised.Pencariandilakukanhinggadiperolehnilaitertinggi, nilaiterendahatauerror terkecil, karenatanpanilaitarget makasolusisaatiniselaludibandingkandengansolusisebelumnyauntukmenunjukkanakurasidarisolusi. Beberapacontohpersoalansepertipembelajaranunsupervised, pencariannilaimaksimal/minimal

Flowchart PencarianAcak

DenganNilaiTargetMulaiBangkitkansolusisecaraacakxMasukkan NilaiTarget T dan nilai toleransi εBandingkan dengan nilai targete = | f(x) –T |e<εBangkitkan solusi baru xx adalah solusi yang dicariSelesaiyatidak

Listing Program Bahasa C:

Pencarian Acak Untuk Menebak AngkaYang

Disembunyikan Oleh Komputer#include <stdlib.h>#include <fstream.h>void main(){int angkaTersembunyi,angkaTebakan;int sw,n;// Memasukkan angka tersembunyiangkaTersembunyi=12;// Mengulang tebakan sampai ketemu//sw nilaiyangmenunjukkan sudah ketemu atau belum//sw=0belum ketemu,dan sw=1sudah ketemu// njumlah tebakansw=0;n=0;while(sw==0) {n++;// Mengacak tebakan baruangkaTebakan=21*rand()/RAND_MAX;cout<< “Tebakan ke” << n << “adalah” ;cout<< angkaTebakan<<endl;// Jika angka tebakan =angka tersembunyi maka// tebakan benar dan proses berhentiif(angkaTebakan==angkaTersembunyi)sw=1;}}#include <stdlib.h>#include <fstream.h>void main(){int angkaTersembunyi,angkaTebakan;int sw,n;// Memasukkan angka tersembunyiangkaTersembunyi=12;// Mengulang tebakan sampai ketemu//sw nilaiyangmenunjukkan sudah ketemu atau belum//sw=0belum ketemu,dan sw=1sudah ketemu// njumlah tebakansw=0;n=0;while(sw==0) {n++;// Mengacak tebakan baruangkaTebakan=21*rand()/RAND_MAX;cout<< “Tebakan ke” << n << “adalah” ;cout<< angkaTebakan<<endl;// Jika angka tebakan =angka tersembunyi maka// tebakan benar dan proses berhentiif(angkaTebakan==angkaTersembunyi)sw=1;}}

Listing Program BahasaC:

Pencarian Acak Untuk Menebak KataYang

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 awalfor(i=0;i<5;i++)kata[i]=26*rand()/RAND_MAX+1;//MenghitungErrorEmin=0;for(i=0;i<5;i++)Emin+=abs(kata[i]-kataTarget[i]);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak katafor(i=0;i<5;i++)kataAcak[i]=26*rand()/RAND_MAX+1;//MenghitungErrorE=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 awalfor(i=0;i<5;i++)kata[i]=26*rand()/RAND_MAX+1;//MenghitungErrorEmin=0;for(i=0;i<5;i++)Emin+=abs(kata[i]-kataTarget[i]);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak katafor(i=0;i<5;i++)kataAcak[i]=26*rand()/RAND_MAX+1;//MenghitungErrorE=0;for(i=0;i<5;i++) E+=abs(kataAcak[i]-kataTarget[i]);

Listing Program BahasaC:

Pencarian Acak Untuk Menebak KataYang

Disembunyikan Oleh Komputer [2]//MembandingkanErrorif(E<Emin) {for(i=0;i<5;i++)kata[i]=kataAcak[i];Emin=E;}//Menampilkan hasil pencariancout<<iterasi<< ” : “;for(i=0;i<5;i++)cout<< char(kata[i]+64);cout<< ” Error = ” <<Emin<<endl;}}//MembandingkanErrorif(E<Emin) {for(i=0;i<5;i++)kata[i]=kataAcak[i];Emin=E;}//Menampilkan hasil pencariancout<<iterasi<< ” : “;for(i=0;i<5;i++)cout<< char(kata[i]+64);cout<< ” Error = ” <<Emin<<endl;}}

Listing Program Bahasa C:

Pencarian Acak Untuk Mencari Nilai MaksimalF(x)#include <stdlib.h>#include <math.h>#include <fstream.h>floatfungsi(float u){return (float)(u*exp(-3*u)*cos(2*u));}void main(){float x,y,xMaks,yMaks;int iterasi,MaxIter=100;//Inisialisasi SolusixMaks=(float)rand()/RAND_MAX;yMaks=fungsi(xMaks);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak Solusi Barux=(float)rand()/RAND_MAX;y=fungsi(x);if(y>yMaks) {xMaks=x; yMaks=y;}cout<<iterasi<< “: f(” << xMaks;cout<< “) = ” << yMaks<<endl;}}

Listing Program Bahasa C:

Pencarian Acak Untuk Mencari Nilai Minimal F(x)#include <stdlib.h>#include <math.h>#include <fstream.h>floatfungsi(float u){return (float)(u*exp(-3*u)*cos(2*u));}void main(){float x,y,xMin,yMin;int iterasi,MaxIter=100;//Inisialisasi SolusixMin=(float)rand()/RAND_MAX;yMin=fungsi(xMin);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak Solusi Barux=(float)rand()/RAND_MAX;y=fungsi(x);if(y<yMin) {xMin=x; yMin=y;}cout<<iterasi<< “: f(” << xMin;cout<< “) = ” << yMin<< endl;}}

Listing Program Bahasa C:

Pencarian Acak Untuk Mencari Akar Persamaan#include <stdlib.h>#include <math.h>#include <fstream.h>floatfungsi(float u){return (float)(u*exp(-3*u)*cos(2*u));}void main(){float x,y,xMin,yMin;int iterasi,MaxIter=100;//Inisialisasi SolusixMin=(float)rand()/RAND_MAX;yMin=fabs(fungsi(xMin));for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak Solusi Barux=(float)rand()/RAND_MAX;y=fabs(fungsi(x));if(y<yMin) {xMin=x; yMin=y;}cout<<iterasi<< “: f(” << xMin;cout<< “) = ” << yMin<< endl;}}

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 ideyangsangat baik.

Listing Program BahasaC:

Monte Carlo Untuk Menebak KataYang

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 awalfor(i=0;i<5;i++)kata[i]=26*rand()/RAND_MAX+1;//MenghitungErrorEmin=0;for(i=0;i<5;i++)Emin+=abs(kata[i]-kataTarget[i]);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak satu karakter dari katai=5*rand()/RAND_MAX;kataAcak[i]=26*rand()/RAND_MAX+1;//MenghitungErrorE=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 awalfor(i=0;i<5;i++)kata[i]=26*rand()/RAND_MAX+1;//MenghitungErrorEmin=0;for(i=0;i<5;i++)Emin+=abs(kata[i]-kataTarget[i]);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak satu karakter dari katai=5*rand()/RAND_MAX;kataAcak[i]=26*rand()/RAND_MAX+1;//MenghitungErrorE=0;for(i=0;i<5;i++) E+=abs(kataAcak[i]-kataTarget[i]);

Listing Program BahasaC:

Pencarian Acak Untuk Menebak KataYang

Disembunyikan Oleh Komputer [2]

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.//MembandingkanErrorif(E<Emin) {for(i=0;i<5;i++)kata[i]=kataAcak[i];Emin=E;}//Menampilkan hasil pencariancout<<iterasi<< ” : “;for(i=0;i<5;i++)cout<< char(kata[i]+64);cout<< ” Error = ” <<Emin<<endl;}}//MembandingkanErrorif(E<Emin) {for(i=0;i<5;i++)kata[i]=kataAcak[i];Emin=E;}//Menampilkan hasil pencariancout<<iterasi<< ” : “;for(i=0;i<5;i++)cout<< char(kata[i]+64);cout<< ” Error = ” <<Emin<<endl;}}

Listing Program Bahasa C:

Monte Carlo Untuk Mencari Nilai MaksimalF(x)#include <stdlib.h>#include <math.h>#include <fstream.h>floatfungsi(float u){return (float)(u*exp(-3*u)*cos(2*u));}void main(){float x,y,xMaks,yMaks;int iterasi,MaxIter=100;//Inisialisasi SolusixMaks=(float)rand()/RAND_MAX;yMaks=fungsi(xMaks);for(iterasi=1;iterasi<=MaxIter;iterasi++){// Update Solusi Barux=Xmin+(float)rand()/RAND_MAX-0.5;y=fungsi(x);if(y>yMaks) {xMaks=x; yMaks=y;}cout<<iterasi<< “: f(” << xMaks;cout<< “) = ” << yMaks<<endl;}}

Listing Program Bahasa C:

Monte Carlo Untuk Mencari Nilai Minimal F(x)#include <stdlib.h>#include <math.h>#include <fstream.h>floatfungsi(float u){return (float)(u*exp(-3*u)*cos(2*u));}void main(){float x,y,xMin,yMin;int iterasi,MaxIter=100;//Inisialisasi SolusixMin=(float)rand()/RAND_MAX;yMin=fungsi(xMin);for(iterasi=1;iterasi<=MaxIter;iterasi++){//Mengacak Solusi Barux=Xmin+(float)rand()/RAND_MAX-0.5;y=fungsi(x);if(y<yMin) {xMin=x; yMin=y;}cout<<iterasi<< “: f(” << xMin;cout<< “) = ” << yMin<< endl;}}

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s


%d blogger menyukai ini: