100 Lemparan Koin: Simulasi

Jika kamu melempar koin seimbang 100 kali, berapa rata-rata selisih kemunculan sisi muka dan belakang? (Selisih yang dimaksud adalah nilai mutlak.)

Ketika diberikan pertanyaan kuis pertama kali oleh Bang Wibi, jawaban saya mungkin sama dengan kebanyakan dari para pembaca: ~0. Simpel saja alasannya toh? Kalau probabilitas munculnya muka dan belakang sama-sama 0,5, berarti kita bisa berharap bahwa selisihnya akan kecil sekali sehingga mendekati 0. Namun, kelihatannya jawaban tersebut tidak tepat, karena kalau terlalu mudah seperti itu, mengapa harus dibuat sebagai kuis?

Akhirnya, saya terpikir untuk membuat sebuah program simulasi. Perlu dibuat program yang dapat melakukan x kali simulasi untuk 100 lemparan koin sehingga bisa dihasilkan rata-ratanya. Bagusnya lagi, dengan begini kita juga bisa mendekati untuk n lemparan koin.

Sudah terbayang kira-kira programnya akan seperti apa?

Tenang saja. Bagi para pembaca yang lebih matematis, setelah artikel ini, akan disampaikan juga cara matematis untuk menyelesaikan masalah tersebut. Dengan begitu, kita juga bisa membandingkan perbedaan hasil dari simulasi dan hasil dari perhitungan matematis. Berikut saya lampirkan kode yang ditulis dalam bahasa Python untuk melakukan simulasi.

from random import randint

if __name__ == '__main__':
	flip = [10,100,1000]
	x = 10000

	for n in flip:
		s = 0
		for i in range(x):
			f = [randint(0,1) for j in range(n)]
			delta = abs((sum(f) - (n/2)) * 2)
			s += delta
		print float(s)/x

Catatan: Jangan keliru menafsirkan penamaan variabel ini dengan penamaan variabel yang digunakan di perhitungan matematis ya.

Nah, Bang Wibi sendiri ternyata juga melakukan simulasi. Namun, bahasanya berbeda (R), dan jumlah barisnya juga berbeda — lebih sedikit. Hasilnya memang akan berbeda. Bahkan dengan satu program yang sama, hasilnya juga selalu berbeda (karena keluaran dihasilkan berdasarkan hasil yang acak). Kode dengan bahasa R bisa dilihat di bawah ini.

n.trial

Hasil simulasi menunjukkan bahwa untuk 100 kali lemparan, didapatkan rata-rata selisihnya adalah 7,9628 dari 10.000 kali pengulangan. Angka ini berubah-ubah terus setiap simulasi, tapi tidak pernah di bawah 7 dan tidak pernah di atas 9. Ini menunjukkan secara empiris bahwa jawaban ~0 ternyata salah.

Pembaca boleh coba untuk membuat program yang serupa atau menjalankan program di atas dengan mengganti jumlah lemparannya. Perhatikan bahwa ketika lemparannya makin banyak, rata-rata selisihnya pun semakin besar! Kami cukup “kurang kerjaan” dengan membuat grafik dari hasil simulasi tersebut seperti yang dapat dilihat di bawah ini. Rata-rata diperoleh melalui 10.000 kali pengulangan untuk masing-masing 10, 100, 1.000, …, sampai 1 miliar lemparan koin. Kode sumber simulasi dapat diperoleh dari tautan ini.

Lemparan vs Selisih

Lemparan vs Selisih

Saya tidak begitu mengerti ini bentuknya mengikuti apa, tapi yang menarik adalah ketika grafik digambarkan dalam skala log-log, grafiknya menjadi linear!

Linear!

Linear!

Kira-kira mengapa bisa seperti itu ya?