Bagaimana cara kerja generator angka acak?

23

Saya hanya merenungkan tentang rand()fungsi php , dan berpikir tentang bagaimana saya bisa membuat ulang, dan saya muncul sepenuhnya.

Bagaimana cara kerja generator angka acak?

Korvin Szanto
sumber
2
Generator angka acak semu menggunakan seed, tabel konstanta yang telah ditentukan sebelumnya dan rumus matematika. Generator nomor acak nyata biasanya menggunakan kebisingan atmosfer. Anda dapat dengan mudah mendapatkan angka acak dari membaca / dev / acak.
rightfold
Apakah kebisingan atmosfer dijamin acak?
14
function rand() { return 4; /* determined by die roll - guaranteed to be random */ }
Neil
3
Seseorang harus melakukan ini: xkcd.com/221 ;)
Valera Kolupaev

Jawaban:

7

Random Number Generator (RNGs) benar-benar menghasilkan nomor pseudorandom, karena tidak mungkin untuk benar-benar menghasilkan nomor acak SANGAT. Satu-satunya hal yang benar-benar benar-benar acak adalah tindakan Allah, seperti kilat.

Artikel wikipedia ini mungkin dapat membantu Anda dalam penjelasan: http://en.wikipedia.org/wiki/Random_number_generators


Dari apa yang saya mengerti, pada dasarnya ada dua bagian dari RNG: benih, dan kemudian nomor acak yang dipilih dari benih itu. Ketika Anda menabur RNG, Anda memberikannya setara dengan titik awal. Titik awal itu kemudian memiliki banyak angka yang "di dalam" itu yang dipilih oleh program. Di PHP, Anda dapat menggunakan srand () untuk "mengocok" benih, sehingga Anda hampir selalu mendapatkan jawaban yang berbeda. Anda kemudian dapat menggunakan rand (min, maks) untuk masuk ke seed dan memilih nomor antara min dan max, inklusif.


PERINGATAN, MUNGKIN ANALOGI KEJUANGAN KE DEPAN!

Pikirkan setiap 'benih' sebagai peti es, dan kemudian angka acak sebagai es batu. Katakanlah Anda memiliki 1000 peti es dan masing-masing peti memiliki 1000 kubus es di dalamnya. Di county fair, mereka akan memilih peti es untuk mulai digunakan untuk minuman, dan mereka hanya bisa menggunakan satu es batu. Namun, mereka hanya membutuhkan es batu yang lebih besar dari 1 inci kubik. Jadi mereka akan memilih peti secara acak di antara 1.000 peti itu, dan kemudian mereka akan memilih es batu di dalam peti itu secara acak. Jika itu berfungsi untuk ukuran yang mereka inginkan, mereka menggunakannya. Jika tidak, mereka memasukkannya kembali ke dada bersama yang lain. Jika mereka ingin membuatnya sedikit lebih menyenangkan, mereka berganti dada terlebih dahulu tanpa sadar, jika Anda mau!

Adapun bagaimana PHP benar-benar secara fisik memilih seed dan nomor acak, saya tidak memiliki cukup pengetahuan untuk itu (yang mungkin adalah apa yang paling Anda bertanya-tanya tentang!). Saya tidak akan mencoba dan mengulangi fungsi rand (); untuk sebagian besar aplikasi berbasis web yang akan Anda buat, rand () harus cukup untuk nomor acak apa pun yang Anda perlukan.

Lihat juga generator kongruensial linier, ini mungkin lebih dari apa yang Anda cari jika Anda menginginkan detail kotor: http://en.wikipedia.org/wiki/Linear_congruential_generator

Semoga ini membantu!


sumber
7
Bagaimana tindakan godacak sedikit pun? Selain itu, petir juga tidak acak, ia mengikuti jalur yang ditentukan oleh berbagai kondisi. Juga, juru bahasa yang menghasilkan angka pada dasarnya tidak relevan.
7
Saya menggunakan tindakan Tuhan dalam pengertian hukum: en.wikipedia.org/wiki/Act_of_God Mereka dianggap acak karena mereka berada di luar kendali manusia.
4
Jadi intinya, tidak ada yang acak. Tetapi itu akan membutuhkan setiap kejadian yang tampaknya acak untuk dipengaruhi, yang tidak bekerja ketika Anda sampai di awal waktu .... Sepertinya saya akan mengambil beberapa kelas filsafat = D
6
@ Korvin, sejauh yang kita tahu, fenomena kuantum seperti peluruhan radioaktif, atau emisi foton oleh atom tereksitasi adalah benar-benar acak. Namun, matematikawan dan filsuf berdebat apa artinya menjadi benar-benar acak. Dan sementara orang-orang biasa berpikir lemparan koin cukup acak, pesulap panggung lincah ( news.stanford.edu/pr/2004/diaconis-69.html ) secara teratur dapat memperoleh 10 kepala dengan 10 flips.
Charles E. Grant
1
@ Charles - Melempar koin bahkan bukan kepala / ekor biner, itu sebenarnya kepala / ekor / tepi, sehingga pesulap panggung yang sangat baik bisa membuatnya turun bukan kepala atau ekor. * 8 ')
Mark Booth
18

Mereka biasanya tidak benar-benar acak, tetapi disebut pseudo-acak karena mereka menghasilkan urutan angka yang tampak acak. Ini dilakukan dengan beberapa rumus matematika yang menarik. Salah satu yang paling umum adalah Linear Congruential Generator .

Bilangan pseudo-acak memang memiliki satu properti yang bermanfaat yang tidak dimiliki bilangan acak: jika Anda menggunakan seed yang sama saat memulai, Anda akan mendapatkan kembali urutan yang sama. Ini bisa sangat berguna untuk pengujian.

Mark tebusan
sumber
Jika saya memahami pernyataan kedua Anda dengan benar: random(5332)akan selalu sama dengan random(5332)?
2
@ Korvin, tidak, maksud saya jika Anda menelepon srand(5332)maka nomor berikutnya yang dikembalikan randakan selalu sama.
Mark Ransom
3
"Tampaknya acak" -> memiliki sifat statistik yang sama dengan angka yang benar-benar acak.
+1 untuk tautan Wikipedia LGC, ini memiliki animasi yang sangat baik tentang mengapa PRNG yang sederhana memiliki keterbatasan serius ketika melakukan simulasi Monte-carlo multidimansional.
Mark Booth
4

Apakah Anda meminta Pseudorandom atau Acak? Yang lain menjawab tentang pseudorandom, izinkan saya berbicara tentang Random.

Ada (sebenarnya?) Random Number Generator berbasis perangkat keras yang dijual. Mereka didasarkan pada chip dengan radio kecil yang mengukur white noise dari radiasi luar angkasa, atau sampel radioaktif kecil dan mengukur periode antara peluruhannya. Masalah dengan mereka adalah bandwidth - jumlah entropi yang bisa mereka hasilkan tidak terlalu tinggi sehingga mereka digunakan untuk biji algoritma pseudorandom. Mereka digunakan dalam sistem bank, keamanan tinggi dan sejenisnya.

OTOH, jika Anda bertemu dengan pengembang sistem tertanam, mereka akan menertawakan ini. Untuk keperluan umum dalam pemrograman mikrokontroler, membaca 4 bit rendah dari Analog-Digital Converter 16-bit apa pun yang mengambang (tidak terhubung) pin akan menghasilkan suara acak yang sangat baik, pada lebih dari cukup bandwidth (semakin pendek periode pemungutan suara semakin " berisik "pembacaan), dan lebih mudah daripada menulis rutin RNG yang sebenarnya. Dan mengingat ADC umumnya ditemukan diimplementasikan dalam silikon mikrokontroler, yang umum diimplementasikan, dan sering diimplementasikan dengan 8 saluran yang Anda butuhkan mungkin 5 untuk aplikasi Anda, itu praktis gratis.

Dan bahkan jika Anda tidak memiliki ADC, beberapa elemen yang terhubung ke pin GPIO digital akan menghasilkan suara yang cukup bagus. Dalam embedded, noise selalu ada (dan terus-menerus diperjuangkan), sehingga memperoleh beberapa keacakan benar sangat mudah.

SF.
sumber
2

Ada banyak cara untuk mencoba meniru urutan angka "acak". Perhentian pertama Anda harus membaca tentang generator linear kongruensial , pasti. Ini adalah bagaimana kebanyakan generator angka acak dasar bekerja, dan saya bertaruh itulah cara kerja fungsi rand () PHP.

Pertanyaan berikutnya yang lebih menarik untuk direnungkan adalah bagaimana benih itu sendiri? waktu? Alamat IP? dll.


sumber
Benih adalah apa yang membingungkan saya, saya tidak bisa memikirkan apa pun yang mungkin dapat menaburkan fungsi tanpa semacam pola, dan bahkan jika tidak, maka apa yang menyebabkan benih acak dihasilkan di tempat pertama!
3
Saya percaya cap waktu sering digunakan sebagai benih awal ketika tidak ada yang benar-benar disediakan dari sumber lain. Dalam BASIC lama, RANDOMIZE TIMERadalah idiom umum, dan "cukup baik" untuk sebagian besar tujuan (non-kriptografi). Menurut man 3 srand , pustaka GNU C menggunakan seed tetap 1 hingga PRNG di-reseed.
CVn
1

Pertama-tama, hampir semua rand()fungsi tidak memberikan keacakan yang sebenarnya, melainkan memberikan apa yang disebut angka acak semu.

Jadi, bagaimana cara kerja generator angka pseudo-acak? Pada dasarnya dengan cara yang sama enkripsi berfungsi: Anda memiliki fungsi (hash) yang mengambil beberapa input, dan menghasilkan beberapa output sedemikian rumit sehingga tidak mungkin dari output untuk menebak input atau sebaliknya. Artinya, setiap cypher dapat digunakan untuk membuat generator pseudo-acak yang agak bagus. Namun, sementara Anda dapat menggunakan generator pseudo-acak untuk melakukan enkripsi pada prinsipnya, sebagian besar generator nomor pseudo-acak terutama dikembangkan untuk kecepatan, bukan keamanan kriptografi, sehingga mereka tidak akan memberi para hacker sakit kepala.

Untuk generator pseudo-acak, fungsi hashing diterapkan pada beberapa keadaan internal tersembunyi dari generator, dan outputnya digunakan untuk a) memodifikasi keadaan internal itu, dan b) untuk menghitung output dari rand()fungsi tersebut. Doa selanjutnya rand()akan menggunakan yang mengubah keadaan internal, dan dengan demikian menghasilkan hasil yang berbeda. Semakin baik fungsi hash, semakin mudah hasilnya dapat dibedakan dari angka acak yang sebenarnya.


Sebagai soal fakta, komputer saat ini memiliki akses ke nomor acak nyata: Mereka berasal dari jitter dalam waktu gangguan yang dihasilkan oleh perangkat eksternal. Linux menggunakan nilai-nilai ketidakpastian kecil ini untuk secara konstan menggerakkan "kumpulan entropi", yang hanya beberapa kilobyte dari kondisi internal. Hash kriptografi berdasarkan kumpulan entropi ini tersedia melalui perangkat /dev/randomdan /dev/urandom. Jadi, akses ke beberapa angka acak yang benar-benar bagus semudah membuka salah satu dari dua perangkat ini dan membaca beberapa byte darinya.

cmaster - mengembalikan monica
sumber
-2

Angka acak adalah angka yang dihasilkan oleh proses yang outputnya tidak dapat diprediksi. yaitu kita tidak bisa mengatakan apa yang akan menjadi output selanjutnya. Kita dapat mengambil beberapa contoh hasil dadu. Apa yang akan dihasilkan ketika kita melempar dadu tidak dapat diprediksi.

Ada dua jenis Angka Acak 1. Angka acak benar 2. Angka acak semu.

Bagaimana angka acak digenerasi

Badal
sumber
1
Silakan gunakan format kutipan untuk menyorot bagian mana dari jawaban itu milik Anda dan yang dari sumber yang Anda kutip. Jika semua jawaban Anda adalah salinan / tempel dari sumber eksternal, itu bukan jawaban yang baik di sini.
Mat
ini tampaknya tidak menawarkan sesuatu yang substansial atas poin yang dibuat dan dijelaskan dalam 6 jawaban sebelumnya
agas