Semper Infidelis

Python, Dice and Gaussian Distribution

Semisal, kita harus bertaruh dadu dengan 1 buah dadu bersisi 6, angka yang mana yang akan paling sering keluar ? Tentu, masing-masing sisi memiliki probabilitas yang sama. Yaitu, 1/6.

Namun, bagaimana halnya jika kita melempar 2 buah dadu dalam 1 kali lemparan ? Nilai berapakah yang akan sering keluar ? Karena dengan 2 buah dadu kita bisa mendapatkan nilai dengan range 2 sampai dengan 11, oleh karenanya, sebagian kecil orang ada yang mengasumsikan bahwa probabilitas munculnya setiap nilai yang bisa dihasilkan oleh 2 buah dadu adalah 1/11.

Namun ini adalah keliru. Untuk membuktikannya. Mari kita mulai mensimulasikan kasus pertama terlebih dahulu.

import matplotlib.pyplot as p
import random

Pertama-tama, kita gunakan library matplotlib untuk membuat plot dari hasil simulasi. Sementara library random kita gunakan untuk membuat dadunya.

Setelah itu, kita buat 1 buah dadu. Dadu ini akan kita simulasikan untuk dilempar 10 juta kali. Dan semua nilai yang dikeluarkan oleh dadu tersebut akan kita catat untuk kita lihat hasilnya kemudian dalam bentuk plot.

import matplotlib.pyplot as p
import random

throw = 10000000
result = []
for j in range(throw):
    total = random.randint(1,6)
    result.append(total)
p.title('Dice = 1 , Throw = '+ str(throw))
n, bins, patches = p.hist(result, 6, normed=1, facecolor='g', alpha=0.75)
p.show()

Hasil plot dari script di atas adalah sebagai berikut. Imgur

Plot di atas membuktikan bahwa setiap sisi pada 1 buah dadu memiliki probabilitas yang sama untuk muncul.

Apabila sulit bagi anda untuk mengerti baris p.title dan juga n, bins, patches, abaikan saja baris ini sampai tulisan ini berakhir.


Mari kita lanjutkan dengan 2 buah dadu.

Kita modifikasi script di atas agar selanjutnya nanti kita bisa mensimulasikan lemparan lebih dari 1 dadu.

import matplotlib.pyplot as p
import random

dice = 2
throw = 10000000
result = []
for i in range(throw):
    total = 0
    for j in range(dice):
        total = total + random.randint(1,6)
    result.append(total)
p.title('Dice = '+ str(dice) +' , Throw = '+ str(throw))
n, bins, patches = p.hist(result, dice*6-(dice-1), normed=1, facecolor='g', alpha=0.75)

p.show()

Maka hasilnya sebagai berikut. Imgur

Plot histogram di atas menunjukkan bahwa ada konsentrasi sample lemparan pada angka 7. Histogram di atas juga menunjukkan bahwa probabilitas nilai yang bisa dimunculkan oleh 2 buah dadu tidaklah sama. Hal ini dikarenakan nilai komposisi setiap nilai angka 7 lebih variatif daripada angka yang lainnya. Contoh, nilai 2 hanya bisa dibentuk dengan komosisi dadu (1,1). Sementara angka 7 memiliki kemungkinan komposisi yang banyak, mulai dari (1,6) , (2,5) , (3,4) , (4,3) , (5,2) , (6,1). Atau lebih jelasnya, bisa dilihat dengan tabel ini.

Nilai dari 2 dadu Komposisi
2 (1,1)
3 (1,2) , (2,1)
4 (1,3) , (2,2) , (3,1)
5 (1,4) , (2,3) , (3,2) , (4,1)
6 (1,5) , (2,4) , (3,3) , (4,2) , (5,1)
7 (1,6) , (2,5) , (3,4) , (4,3) , (5,2) , (6,1)
8 (2,6) , (3,5) , (4,4) , (5,3) , (6,2)
9 (3,6) , (4,5) , (5,4) , (6,3)
10 (4,6) , (5,5) , (6,4)
11 (5,6) , (6,5)
12 (6,6)

Tabel di atas pun memiliki pola serupa dengan plot yang sebelumnya. Nilai 7 memiliki probabilitas terbesar dikarenakan ia adalah nilai yang memiliki banyak komposisi yang dapat dihasilkan oleh 2 buah dadu. Ini mematahkan asumsi sebagian kecil orang yang beranggapan bahwa 2 buah dadu menghasilkan 11 nilai yang mana setiap nilainya memiliki probabilitas muncul 1/11.


Namun, bagaimana apabila kita menggunakan 3 dadu ? Berhubung sebelumnya script tersebut telah kita modifikasi untuk mensimulasikan sebanyak X dadu (X > 0), maka kita ubah saja nilai variabelnya. Dan seperti inilah hasilnya. Imgur

Dan apabila kita menggunakan 50 dadu, maka akan terbentuk kurva seperti berikut. Imgur

Kurva inilah yang disebut sebagai Gaussian Distribution. Ingatlah, di saat jumlah dadu lebih dari 1, maka probabilitas untuk keluarnya setiap nilai tidak lagi sama seperti melempar 1 buah dadu.