4. bilangan acak dan pembangkitannya

28
1 4. BILANGAN ACAK dan Pembangkitannya 4.1. Pengantar Bilangan Acak Bilangan acak merupakan suatu besaran dasar dalam modeling dan teknik-teknik simulasi. Pada modeling dan simulasi banyak sekali memanfaatkan bilangan acak sebagai besaran untuk mendapatkan penyelesaian suatu permasalahan simulasi. Untuk mendapatkan bilangan yang benar-benar acak, secara manual dapat dilakukan dengan menggunakan undian, arisan, atau pemakaian mesin roullete. Tetapi secara komputasi, hal ini sulit dilakukan. Hal ini disebabkan bahwa komputer merupakan mesin deterministik, sedangkan bilangan acak muncul sebagai kejadian yang probabilistic. Satu-satunya cara untuk mendapatkan bilangan acak adalah dengan meng- gunakan pseudo random generator (pembangkit bilangan acak semu), dimana bilangan acak diperoleh secara deterministik (aritmatik). Berbagai metode untuk membangkitkan bilangan acak banyak dibahas, dalam modul ini hanya dibahas beberapa macam metode saja, - LCM (linear Congruent Method),

Upload: arama

Post on 15-Jan-2016

229 views

Category:

Documents


13 download

DESCRIPTION

4. BILANGAN ACAK dan Pembangkitannya. 4.1. Pengantar Bilangan Acak - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 4.  BILANGAN ACAK dan Pembangkitannya

1

4. BILANGAN ACAK dan Pembangkitannya

4.1. Pengantar Bilangan Acak

Bilangan acak merupakan suatu besaran dasar dalam modeling dan teknik-teknik simulasi. Pada modeling dan simulasi banyak sekali memanfaatkan bilangan acak sebagai besaran untuk mendapatkan penyelesaian suatu permasalahan simulasi.Untuk mendapatkan bilangan yang benar-benar acak, secara manual dapat dilakukan dengan menggunakan undian, arisan, atau pemakaian mesin roullete. Tetapi secara komputasi, hal ini sulit dilakukan. Hal ini disebabkan bahwa komputer merupakan mesin deterministik, sedangkan bilangan acak muncul sebagai kejadian yang probabilistic. Satu-satunya cara untuk mendapatkan bilangan acak adalah dengan meng-gunakan pseudo random generator (pembangkit bilangan acak semu), dimana bilangan acak diperoleh secara deterministik (aritmatik). Berbagai metode untuk membangkitkan bilangan acak banyak dibahas, dalam modul ini hanya dibahas beberapa macam metode saja,

- LCM (linear Congruent Method), - Suffle Method, d- Rejection Method.

Page 2: 4.  BILANGAN ACAK dan Pembangkitannya

2

4.2. Metode Linear Congruent (LCM)

Metode Linear Congruent ini sangat banyak digunakan untuk membangkitkan bilangan acak r1, r2, …, rn yang bernilai [0,m] dengan memanfaatkan nilai sebelumnya. Untuk membangkitkan bilangan acak ke n+1 (rn+1) dengan metode Linear Congruent, didefinisikan:

dimana a,c dan m dinamakan nilai pembangkit, r0 dinamakan nilai awal, biasanya nilai ini yang di-gunakan dalam proses randomize (mengacak di awal atau state awal).

Contoh 4.1.Misalkan ditentukan a=4, c=1 dan r1=3, maka bilangan acak 0 s/d 8 (m=9) dapat dihitung:r2=((4)(3)+1) mod 9 = 4r3=((4)(4)+1) mod 9 = 8r4=((4)(8)+1) mod 9 = 6dan seterusnya.

mcarr nn mod1

4.2. Metode Linear Congruent (LCM)

Page 3: 4.  BILANGAN ACAK dan Pembangkitannya

3

4.2. Metode Linear Congruent (LCM)

Algoritma dari metode Linear Congruent ini

• Masukkan a, c, m dan r1• Masukkan berapa bilangan acak yang akan dibangkitkan (n)• Untuk i=1 s/d n : hitung r(i+1)=(a.r(i)+c) mod m

Implementasi dari metode Linear Congruet ini dengan MATLAB adalah sebagai berikut:

% Mendefinisikan nilai pembangkita=4; c=1; m=9;% Mendefinisikan nilai state awalr(1)=3;%Proses pembangkitan 20 bilangan acakfor k=1:20 r(k+1)=mod(a*r(k)+c,m);end%Menampilkan bilangan acakdisp(r)

4.2. Metode Linear Congruent (LCM)

Page 4: 4.  BILANGAN ACAK dan Pembangkitannya

4

4.2. Metode Linear Congruent (LCM)

Simpan program ini ke dalam file acak.m. Untuk menampilkan hasil bilangan acak dapat dituliskan nama variabelnya yaitu r:

Coba tampilkan hasilnya, seperti contoh berikut:

>> acak Columns 1 through 8 3 4 8 6 7 2 0 1 Columns 9 through 16 5 3 4 8 6 7 2 0 Columns 17 through 21 1 5 3 4 8

Perhatikan bahwa bilangan yang dihasilkan akan berulang setiap 9 bilangan, sehingga dapat dikatakan bahawa hasilnya tidak benar-benar acak! Disinilah menariknya mem-pelajari pembangkitan bilangan acak, yaitu mengubah mesin aritmatik menjadi mesin acak. Salah satu cara adalah dengan mengubah nilai pembangkitnya, misalkan dengan nilai pembangkit (a,c,m,r1) = (51,1,256,10)

4.2. Metode Linear Congruent (LCM)

Page 5: 4.  BILANGAN ACAK dan Pembangkitannya

5

4.2. Metode Linear Congruent (LCM)

Untuk menganti nilai pembangkit, ubah nilai a,c, m dan r(1). Misalkan ubah dengan nilai (a,c,m,r1) = (327,1,512,11), maka ubah empat baris teratas dari program di atas yang tertulis:

% Mendefinisikan nilai pembangkita=4; c=1; m=9;% Mendefinisikan nilai state awalr(1)=3;menjadi% Mendefinisikan nilai pembangkita=327; c=1; m=512;% Mendefinisikan nilai state awalr(1)=11;Perhatikan bagaimana hasilnya. Bila program ini dijalankan hasilnya akan

menjadi:>> acak Columns 1 through 8 11 14 483 246 59 350 275 326 Columns 9 through 16 107 174 67 406 155 510 371 486 Columns 17 through 21 203 334 163 54 251 Terlihat sampai 21 bilangan belum terdapat pengulangan.

4.2. Metode Linear Congruent (LCM)

Page 6: 4.  BILANGAN ACAK dan Pembangkitannya

6

4.2. Metode Linear Congruent (LCM)

Tugas 4.1.Dengan menggunakan program ini dapatkan sampai berapa bilangan angka

11 muncul lagi.Contoh 4.3.Jalankan program acak.m berkali-kali, perhatikan hasilnya akan sama. Bila

dijalankan lagi hasilnya akan:>> acak Columns 1 through 8 11 14 483 246 59 350 275 326 Columns 9 through 16 107 174 67 406 155 510 371 486 Columns 17 through 21 203 334 163 54 251Hasil ini sama dengan hasil sebelumnyaProgram acak.m di atas ubah nilai r(1) dengan :

t=fix(clock);r(1)=floor(mod(t(6),m));

di baris paling atas. Fungsi fix dan floor adalah fungsi pem-bulatan digunakan untuk menjamin bilangan yang dihasilkan selalu bilangan bulat, dan fungsi mod adalah fungsi sisa pembagian yang digunakan untuk menjamin bilangan yang dihasilkan selalu lebih kecil dari m.

4.2. Metode Linear Congruent (LCM)

Page 7: 4.  BILANGAN ACAK dan Pembangkitannya

7

4.2. Metode Linear Congruent (LCM)

Hasil dijalankan pertama:>> acak Columns 1 through 7 47 10 199 50 479 474 375 Columns 8 through 14 258 399 426 39 466 319 378 Columns 15 through 21 215 162 239 330 391 370 159Hasil dijalankan kedua:>> acak Columns 1 through 7 24 169 480 289 296 25 496 Columns 8 through 14 401 56 393 0 1 328 249 Columns 15 through 21 16 113 88 105 32 225 360

Perhatikan hasilnya tidak pernah sama karena r(1) merupakan pengambilan nilai 1 ms.

4.2. Metode Linear Congruent (LCM)

Page 8: 4.  BILANGAN ACAK dan Pembangkitannya

8

4.2. Metode Linear Congruent (LCM)

Contoh 4.4.Membangkitkan 20 bilangan acak 0 s/d 1dengan menggunakan fungsi

standard dari MATLAB

% Mendefinisikan state awal menggunakan waktut=fix(clock)srand(t(6))% Membangkitkan 20 bilangan acak% dilakukan dengan ukuran 1 baris 20 kolomx=rand(1,20)% Menampilkan bilangan acakdisp(x)

Simpan dengan nama file acak1.m, kemudian jalankan dengan menuliskan acak1. Hasil dari setiap komputer tidak akan sama.

4.2. Metode Linear Congruent (LCM)

Page 9: 4.  BILANGAN ACAK dan Pembangkitannya

9

4.2. Metode Linear Congruent (LCM)

Contoh 4.5.Membangkitkan 20 bilangan acak 0 s/d 1 menggunakan LCM dengan

nilai pembangkat (a,c,m) = (327,1,512) dan r1 adalah state awal yang dibangkitkan berdasarkan wkatu.

% Mendefinisikan nilai pembangkita=327; c=1; m=512;% Mendefinisikan nilai state awalt=fix(clock)r(1)=mod(t(6),m);%Proses pembangkitan 20 bilangan acakfor k=1:19 r(k+1)=mod(a*r(k)+c,m);endr=r/m;%Menampilkan bilangan acakdisp(r)Simpan dengan nama file acak2.m

4.2. Metode Linear Congruent (LCM)

Page 10: 4.  BILANGAN ACAK dan Pembangkitannya

10

4.2. Metode Linear Congruent (LCM)

Tugas 4.2.Jalankan kedua program di atas (acak1.m dan acak2.m) dengan terlebih

dahulu mengubah jumlah bilangan acaknya dengan 1000 bilangan acak, kemudian tuliskan perintah untuk menghitung histogram dari masing-masing bilangan acak sebagai berikut:

h1=hist(x,10);h2=hist(r,10);

Untuk menggambar histogramnya sebagai berikut:subplot(1,2,1), plot(h1), gridsubplot(1,2,2), plot(h2), grid

Perhatikan kemunculan setiap kejadian (range angka 0.1) dan apa yang berbeda.

Untuk menjelaskan perbedaan bisa digunakan perhitungan statistik untuk:• Menghitung ekspektasi dari kedua bilangan acak tersebut.• Menghitung pengujian interval dari kedua distribusi di atas

dengan menganggap salah satu sebagai nilai acuan.

Page 11: 4.  BILANGAN ACAK dan Pembangkitannya

11

4.3. Metode Shuffle Untuk Memperbaiki Bilangan Acak

Untuk memperbaiki hasil distribusi bilangan acak yang dibangkitkan dengan metode linear congruent agar seakan-akan tidak berulang, dapat digunakan metode suffle, yaitu mengganti kedudukan bilangan acak berdasarkan indeks pada barisan bilangan acaknya. Algoritma metode suffle ini adalah:

1. Bangkitkan n bilangan acak ai [0,1] dengan LCM2. Bangkitkan bilangan acak baru b [0,1] dengan LCM3. Hitung k = n b4. Hitung r = ak5. Hitung ak = b

Ambil nilai r sebagai sebagai bilangan acak baru dan ulangi langkah 2.Kedua macam metode pembangkitan bilangan acak di atas (LCM dan

Suffle) akan menghasilkan bilangan acak dengan distribusi uniform, dalam arti banyak kemungkinan munculnya setiap bilangan adalah sama. Berikut ini akan dibahas bagaimana membangkitkan bilangan acak dengan distribusi tertentu.

Page 12: 4.  BILANGAN ACAK dan Pembangkitannya

12

4.3. Metode Shuffle Untuk Memperbaiki Bilangan Acak

Tugas 4.2.Jalankan kedua program di atas (acak1.m dan acak2.m) dengan terlebih

dahulu mengubah jumlah bilangan acaknya dengan 1000 bilangan acak, kemudian tuliskan perintah untuk menghitung histogram dari masing-masing bilangan acak sebagai berikut:

h1=hist(x,10);h2=hist(r,10);

Untuk menggambar histogramnya sebagai berikut:subplot(1,2,1), plot(h1), gridsubplot(1,2,2), plot(h2), grid

Perhatikan kemunculan setiap kejadian (range angka 0.1) dan apa yang berbeda.

Untuk menjelaskan perbedaan bisa digunakan perhitungan statistik untuk:• Menghitung ekspektasi dari kedua bilangan acak tersebut.• Menghitung pengujian interval dari kedua distribusi di atas

dengan menganggap salah satu sebagai nilai acuan.

Page 13: 4.  BILANGAN ACAK dan Pembangkitannya

13

4.3. Metode Shuffle Untuk Memperbaiki Bilangan Acak

Contoh 4.6.Bangkitkan 10 bilangan acak 0 s/d 9 atau ditulis [0 9] meng-gunakan

metode LCM (a,c,m,r1)=(4,1,9,3), kemudian lakukan resuffle 3 kali. Tuliskan program di bawah ini, kemudian simpan dalam file acakre1.m

% Nilai pembangkitan dan state awala=4; c=1; m=9; r(1)=3;% membangkitkan 9 bilangan acak% karena state awal dianggap 1 bilanganfor i=1:9r(i+1)=mod(a*r(i)+c,m);enddisp('Sebelum resuffle:')disp(r)% resuffle 3 kalifor i=1:3 r(10+1)=mod(a*r(9+i)+c,m); p=r(10+i); r(p+1)=p;enddisp('Sesudah resuffle:')disp(r(1:10))

Page 14: 4.  BILANGAN ACAK dan Pembangkitannya

14

4.3. Metode Shuffle Untuk Memperbaiki Bilangan Acak

Jalankan program dengan menuliskan acakre1, dan hasilnya adalah:

>> acakre1Sebelum resuffle: Columns 1 through 8 3 4 8 6 7 2 0 1 Columns 9 through 10 5 3 Sesudah resuffle: Columns 1 through 8 3 4 8 6 4 2 6 1 Columns 9 through 10 8 3

Page 15: 4.  BILANGAN ACAK dan Pembangkitannya

15

4.4.Membangkitkan Bilangan Acak Berdistribusi Non-Uniform

Untuk membangkitkan bilangan acak ak yang berdistribusi non-uniform dengan fungsi f(a) yang didefinisikan berada pada [amin, amax]. Jika integral dari fungsi f(a) dapat dihitung misalkan F(a) maka kita dapat membangkitkan bilangan acak ak dengan mentransformasikan bilangan acak 0<y< 1 dengan:a = F-1(y)

Sebagai contoh dibangkitkan bilangan acak berdistribusi eksponensial sebagai berikut: dimana m adalah konstanta. Maka bangkitkan bilangan acak berdistribusi uniform y=[0,1], kemudian hitung :

Bangkitkan bilangan acak [0,1] yang berditribusi Maka integral fungsi f(a) adalah:F(a) = ½ e-2ª

Sehingga invers dari F(a) adalah : a = - ln(y) / 2

m

yyFa

)ln()(1

Page 16: 4.  BILANGAN ACAK dan Pembangkitannya

16

4.4.Membangkitkan Bilangan Acak Berdistribusi Non-Uniform

Implementasi dengan menggunakan MATLAB untuk mem-bangkitkan 10 bilangan acak berdistribusi f(a) adalah sebagai berikut:

Bangkitkan 1000 bilangan acak uniform sebagai berikut:>> a=rand(1,1000)a = Columns 1 through 5 0.7382 0.1763 0.4057 0.9355 0.9169 Columns 6 through 10 0.4103 0.8936 0.0579 0.3529 0.8132

Gunakan fungsi a = -ln(y)/2 untuk membangkitkan bilangan acak eksponensial.

>> b=-log(a)/2;>> b=b/max(b)b = Columns 1 through 5 0.1065 0.6092 0.3166 0.0234 0.0304 Columns 6 through 10 0.3127 0.0395 1.0000 0.3656 0.072

Page 17: 4.  BILANGAN ACAK dan Pembangkitannya

17

4.4.Membangkitkan Bilangan Acak Berdistribusi Non-Uniform

Bila diperhatikan histogramnya sebagai berikut:subplot(2,1,1), hist(a,10),gridtitle('Histogram Uniform')subplot(2,1,2), hist(b,10),gridtitle('Histogram Eksponensial')Hasilnya adalah sebagai berikut:

Page 18: 4.  BILANGAN ACAK dan Pembangkitannya

18

4.5. Membangkitkan Bilangan Acak Berdistribusi Poisson

Fungsi kepadatan probabilitas untuk distribusi Poisson dengan nilai rara-rata m didefinisikan:

dimana i = 0,1,2,3,….

Untuk membangkitkan bilangan acak berdistribusi Poisson digunakan nilai m dan pembangkitan bilangan acak uniform dengan menggunakan metode invers diperoleh bahwa:

dimana i 0

Algoritma untuk membangkitkan bilangan acak berdistribusi Poisson adalah sebagai berikut:

Dengan mengetahui rata-rata distribusi poisson m, maka :

Seterusnya tinggal memanfaatkan model rekursi dari pi.

ii pi

mp

11

!)(

i

meip

im

mep 0

Page 19: 4.  BILANGAN ACAK dan Pembangkitannya

19

4.5. Membangkitkan Bilangan Acak Berdistribusi Poisson

Contoh 4.9.Membangkitkan n bilangan acak berdistribusi poisson dengan rata-rata

m adalah sebagai berikut:% Set nilai rata-rata poisson (m) dan Jumlah bilangan acak yang

dibangkitkan (n)m=input(‘Rata-rata poisson = ‘);n=input(‘Jumlah bilangan acak = ‘);% Membangkitkan 10 bilangan acak berdistribusi poissonfor bil=1:n u=rand; i=0; p=exp(-m); F=p; sw=0; while sw==0; if u<F x(bil)=i; sw=1; else p=m*p/(i+1); F=F+p; i=i+1; end endend% Menampilkan bilangan acakdisp(x);

Page 20: 4.  BILANGAN ACAK dan Pembangkitannya

20

4.5. Membangkitkan Bilangan Acak Berdistribusi Poisson

Simpan dalam file poisson1.m, kemudian jalankan dengan memasukkan m=3 dan n=1000, hasilnya adalah:

>> poisson1Rata-rata poisson = 3Jumlah bilangan acak = 10 Columns 1 through 8 4 3 3 4 1 3 1 2 Columns 9 through 10 2 5Dengan histogram sebagai berikut:

% Menampilkan histogram dari bilangan acak yang diperoleht=min(x):max(x);h=hist(x,t);bar(t,h), grid

Page 21: 4.  BILANGAN ACAK dan Pembangkitannya

21

4.6. Metode Rejection

Metode Rejection ini merupakan metode pembangkitan bilangan acak yang secara langsung memanfaatkan fungsi ditsribusi bilangan acak f(a).

Bila bilangan acak yang dibangkitkan berada pada daerah fungsi f(a) maka a diterima dan bila tidak, maka a ditolak. Metode ini sangat sederhana tetapi untuk membangkitkan banyak bilangan acak diperlukan waktu yang cukup lama.

Algoritma metode rejection:1. Bangkitkan 2 bilangan acak berditribusi uniform x dan y

dengan [0,1].2. Bila y<f(x) maka x diterima dan bila tidak x ditolak.

Page 22: 4.  BILANGAN ACAK dan Pembangkitannya

22

4.6. Metode Rejection

Contoh 4.9.

Bangkitkan 10 bilangan acak berdistribusi Poisson :

dimana m adalah nilai rata-rataHasil dari pembangkitkan bilangan acak berdistribusi poisson dengan rata-rata

2 untuk a=[0,10] menggunakan metode rejection adalah sebagai berikut:

x y f(x) x y f(x) 8 3 0.00 ditolak 3 9 0.18 ditolak 1 4 0.27 ditolak 7 0 0.00 diterima 3 10 0.18 ditolak 7 0 0.00 diterima 2 1 0.27 diterima 3 8 0.18 ditolak 7 6 0.00 ditolak 0 9 0.14 ditolak 2 5 0.27 ditolak 0 7 0.14 ditolak 4 8 0.09 ditolak 4 9 0.09 ditolak 4 4 0.09 ditolak 0 10 0.14 ditolak 10 5 0.00 ditolak 6 5 0.01 ditolak 10 0 0.00 diterima 2 3 0.27 ditolak

!)(

a

meaf

am

Page 23: 4.  BILANGAN ACAK dan Pembangkitannya

23

4.6. Metode Rejection

Dari hasil di atas terlihat bahwa untuk membangkitkan 10 bilangan acak, diperlukan 97 kali percobaan, ini menunjukkan bahwa metode ini tidak terlalu cepat untuk membangkitkan suatu bilangan acak. Tetapi metode ini memang sangat mudah diimplementasikan karena tidak berurusan dengan inversi dari fungsi distribusi f(a) yang terkadang cukup rumit.

Metode rejection ini merupakan suatu metode pem-bangkitan bilangan acak yang banyak dibicarakan, meskipun tidak terlalu cepat ternyata membawa implikasi yang menarik yang akan mengantarkan ke arah pencarian acak (random walk) yang sangat terkenal. Metode ini juga menjadi dasar dari Metode Monte Carlo yang akan di bahas pada bab 5.

Implementasi Metode Rejection untuk membangkitkan bilangan acak [0,9] berdistribusi poisson dalam MATLAB adalah sebagai berikut:

Page 24: 4.  BILANGAN ACAK dan Pembangkitannya

24

4.6. Metode Rejection

% Memasukkan jumlah bilangan acak yang dibangkitkann=input('Jumlah bilangan acak ? ');% Menentukan nilai parameter poisson% misalkan m=3m=3;% Metode rejectionk=0;i=0;while k<=n i=i+1; x=floor(11*rand); y=rand; p=exp(-m)*m^x/factorial(x); fprintf('iterasi ke %d : %d %1.2f %1.2f ---> ',i,x,y,p);

Page 25: 4.  BILANGAN ACAK dan Pembangkitannya

25

4.6. Metode Rejection

if y<=p k=k+1; b(k)=x; fprintf('diterima\n'); else fprintf('ditolak\n'); endend%Menampilkan bilangan acak poissondisp(b)

Simpan dalam file acakn.m, kemudian jalankan dengan menuliskan acakn, perhatikan untuk sejumlah bilangan diperlukan jumlah iterasi yang sangat besar dibandingkan dengan jumlah bilangan acak yang dihasilkan.

Page 26: 4.  BILANGAN ACAK dan Pembangkitannya

26

4.6. Metode Rejection

Tugas 4.3.Dengan menggunakan program acakn di atas, bangkitkan n bilangan

berkali-kali sesuai tabel berikut ini:

Jumlah bilangan yang dibangkitkanJumlah iterasi

12481015162032405064100

Page 27: 4.  BILANGAN ACAK dan Pembangkitannya

27

4.6. Metode Rejection

Gambarkan hasilkan sebagai berikut:

Jumlah bilangan

Jumlah Iterasi

Page 28: 4.  BILANGAN ACAK dan Pembangkitannya

28

4.6. Metode Rejection

Tugas 4.3.

Buatlah program sederhana untuk membangkitkan bilangan acak [0,1] berdistribusi normal dengan rata-rata =0.5 dan standard deviasi =0.2 dengan menggunakan metode rejection.

1. Distribusi normal dengan rata-rata dan standard

deviasi didefinisikan :

2. Hitung waktu yang dibutuhkan untuk membangkitkan 100, 1000, 10000 dan 100000 bilangan acak.

2

2

2

2

1)(

x

exf