Skip to content

Menyimulasikan Randomness dalam komputer dengan cara membuat random number generator dari nol

Notifications You must be signed in to change notification settings

qois51/simulasi-randomNumGenerator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Menyimulasikan Randomness dalam Komputer

Random Number atau Nomor Acak sudah sering kita gunakan dalam pemrograman. Ada 2 metode untuk mendapatkan random number yaitu True Random Numbers dan Pseudorandom Numbers

True Random Numbers, Metode ini dengan cara melakukan pengukuran terhadap segala sesuatu yang dipastikan random, seperti Radioactive Decay. Nomor yang didapat dari cara ini dapat dikatakan sebagai True random numbers. Tentu saja hal ini sangat susah untuk disimulasikan karena mahal dan tidak praktis.

Pseudorandom Numbers, Metode alternatif untuk mendapatkan angka acak. Metode ini melibatkan perhitungan algoritama yang tampaknya dapat menghasilkan hasil yang random. Pada akhirnya hasil yang didapat itu ditentukan oleh initial value atau yang biasanya disebut nilai Seed. Metode ini jauh lebih mudah untuk dipraktikan, jadi simulasi ini akan menggunakan metode ini.

Algoritma

Algoritma yang digunakan dalam simulasi ini adalah LCG, LCG adalah :

Linear Congruential Generator ( LCG ) adalah algoritma yang menghasilkan urutan angka pseudo-acak yang dihitung dengan persamaan linear sepotong -sepotong yang terputus-putus. Metode ini merupakan salah satu algoritma pembangkit bilangan pseudorandom tertua dan paling terkenal. Teori di baliknya relatif mudah dipahami, dan mudah diimplementasikan dan cepat, terutama pada perangkat keras komputer yang dapat menyediakan aritmatika modular dengan pemotongan bit penyimpanan.

-- Wikipedia: Linear congruential generator

Rumus LCG

Rumus dasarnya adalah :

Xn-1 = ( aXn + c ) mod m

keterangan :

  • m = modulus; m > 0
  • a = multiplier; 0 < a < m
  • c = Increment; 0 < c < m
  • Xn = Nilai input pada siklus ke - n
    • X0 = Intial Value atau Start Value
  • Xn+1 = Hasil pada siklus tersebut

Pengaplikasian pada Kode

Bahasa pemrograman yang digunakan adalah rust

Translate rumus menjadi kode

let mut xa = ((a * x0) + c ) % m

Penyesuaian nama variable; xa = Xn+1 dan x0 = Xn

Siklus

Perhitungan akan dilakukan hingga 4 kali siklus (X4)

Parameter

Nilai variable yang digunakan :

  • m = 232 = 4294967296
  • a = 1664525
  • c = 1013904223

Starting Value / Seed (X0)

Nilai seed akan ditentukan oleh waktu. Sehingga nilainya akan berubah - ubah tergantung waktu kode dijalankan. Rumus menentukan Seed adalah :

X0 = jam * menit * detik + tanggal * bulan * tahun

User Input

Pengguna dapat menentukan rentang antara berapa nomor acak tersebut terletak (Contoh : nomor acak antara 1 - 10). Rumus yang digunakan :

Result = offset + (Xn+1 mod range)

Keterangan :

  • Result = Hasil angka acak yang diperoleh sesuai rentang yang diberikan user
  • Offset = Angka yang paling kecil yang user masukkan sebagai titik awal rentang
  • Range = Angka terbesar yang user masukkan dikurang Angka terkecil yang user masukkan
  • Xn+1 = Hasil dari LCG

Menjalankan Program

Untuk menjalankan program, pertama clone repository ini, lalu install Cargo. dan setelah itu jalankan kode berikut :

cargo run

Lampiran

Foto saat menjalankan program

Referensi

About

Menyimulasikan Randomness dalam komputer dengan cara membuat random number generator dari nol

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages