Saya mencoba beberapa pencarian google biasa dll tetapi sebagian besar jawaban yang saya temukan agak ambigu atau bahasa / perpustakaan tertentu seperti Python atau C ++ stdlib.h
dll. Saya mencari bahasa agnostik, jawaban matematis, bukan spesifik perpustakaan.
Sebagai contoh, banyak yang mengatakan bahwa benih adalah titik awal generator bilangan acak dan benih yang sama selalu menghasilkan bilangan acak yang sama. Apa artinya? Apakah itu berarti nomor output adalah fungsi deterministik dari benih tertentu, dan keacakan berasal dari nilai benih? Tetapi jika itu masalahnya, maka dengan memasok benih, bukankah kita, programmer, menciptakan keacakan alih-alih membiarkan mesin melakukannya?
Juga, apa artinya titik awal dalam konteks ini? Apakah ini cara yang tidak ketat untuk mengatakan elemen dari domain peta ? Atau ada yang salah? f : X → Y
sumber
2^19937 − 1
. Benih adalah titik dari urutan yang sangat panjang di mana generator mulai. Jadi ya, itu deterministik.Jawaban:
Kebanyakan pseudo-random number generator (PRNGs) dibangun berdasarkan algoritma yang melibatkan beberapa jenis metode rekursif mulai dari nilai dasar yang ditentukan oleh input yang disebut "seed". PRNG default di sebagian besar perangkat lunak statistik (R, Python, Stata, dll.) Adalah algoritma Mersenne Twister MT19937, yang ditetapkan dalam Matsumoto dan Nishimura (1998) . Ini adalah algoritma yang rumit, jadi sebaiknya baca makalahnya jika Anda ingin tahu cara kerjanya secara detail. Dalam algoritme khusus ini, ada hubungan berulang derajat , dan seed input Anda adalah kumpulan awal vektor . Algoritme menggunakan hubungan perulangan linier yang menghasilkan:x 0 , x 1 , . . . , x n - 1n x0, x1, . . . , xn - 1
di mana dan dan adalah objek yang dapat ditentukan sebagai parameter dalam algoritma. Karena seed memberikan set vektor awal (dan diberikan parameter tetap lainnya untuk algoritme), seri bilangan pseudo-acak yang dihasilkan oleh algoritma diperbaiki. Jika Anda mengubah seed maka Anda mengubah vektor awal, yang mengubah angka pseudo-acak yang dihasilkan oleh algoritma. Ini tentu saja fungsi benih.r1 ⩽ m ⩽ n r SEBUAH
Sekarang, penting untuk dicatat bahwa ini hanyalah satu contoh, menggunakan algoritma MT19937. Ada banyak PRNG yang dapat digunakan dalam perangkat lunak statistik, dan masing-masing melibatkan metode rekursif yang berbeda, sehingga benih tersebut memiliki arti yang berbeda (dalam istilah teknis) di masing-masing. Anda dapat menemukan sebuah perpustakaan PRNGs untuk
R
di dokumentasi ini , yang berisi daftar algoritma yang tersedia dan surat-surat yang menggambarkan algoritma ini.Tujuan dari seed adalah untuk memungkinkan pengguna untuk "mengunci" generator nomor pseudo-acak, untuk memungkinkan analisis yang dapat ditiru. Beberapa analis suka mengatur seed menggunakan true-number generator (TRNG) yang menggunakan input perangkat keras untuk menghasilkan nomor seed awal, dan kemudian melaporkannya sebagai nomor yang dikunci. Jika seed diset dan dilaporkan oleh pengguna asli maka auditor dapat mengulangi analisis dan mendapatkan urutan nomor pseudo-acak yang sama dengan pengguna asli. Jika seed tidak diset maka algoritma biasanya akan menggunakan beberapa seed default (mis., Dari jam sistem), dan umumnya tidak akan mungkin untuk mereplikasi pengacakan.
sumber
Pertama, tidak ada keacakan benar di komputer saat ini menghasilkan "angka acak." Semua generator pseudorandom menggunakan metode deterministik. (Mungkin, komputer kuantum akan mengubahnya.)
Tugas yang sulit adalah membuat algoritma yang menghasilkan output yang tidak dapat dibedakan secara bermakna dari data yang berasal dari sumber yang benar-benar acak.
Anda benar bahwa pengaturan seed akan memulai Anda pada titik awal tertentu yang diketahui dalam daftar panjang nomor pseudorandom. Untuk generator yang diimplementasikan dalam R, Python, dan sebagainya, daftarnya sangat panjang. Cukup lama sehingga bahkan proyek simulasi layak yang terbesar tidak akan melebihi 'periode' generator sehingga nilai-nilai mulai siklus ulang.
Dalam banyak aplikasi biasa, orang tidak mengatur seed. Kemudian benih yang tidak dapat diprediksi diambil secara otomatis (misalnya, dari mikrodetik pada jam sistem operasi). Generator pseudorandom yang umum digunakan telah mengalami serangkaian uji, sebagian besar terdiri dari masalah yang terbukti sulit untuk disimulasikan dengan generator yang sebelumnya tidak memuaskan.
Biasanya, output generator terdiri dari nilai-nilai yang tidak, untuk tujuan praktis, dapat dibedakan dari angka yang dipilih secara acak dari distribusi seragam padaKemudian angka pseudorandom tersebut dimanipulasi sehingga cocok dengan apa yang akan diambil sampel secara acak dari distribusi lain seperti binomial, Poisson, normal, eksponensial, dll.( 0 , 1 ) .
Salah satu tes generator adalah untuk melihat apakah pasangan berturut-turut dalam 'pengamatan' disimulasikan sebagai benar-benar terlihat seperti mereka mengisi satuan persegi secara acak. (Dilakukan dua kali di bawah.) Penampilan yang agak bulat adalah hasil dari variabilitas yang melekat. Akan sangat mencurigakan untuk mendapatkan plot yang terlihat abu-abu seragam sempurna. [Pada beberapa resolusi, mungkin ada pola moire biasa; tolong ubah perbesaran ke atas atau ke bawah untuk menghilangkan efek palsu itu jika itu terjadi.]U n i f( 0 , 1 )
Terkadang berguna untuk mengatur benih. Beberapa kegunaan tersebut adalah sebagai berikut:
Ketika pemrograman dan debugging , nyaman untuk memiliki output yang dapat diprediksi. Begitu banyak programmer menaruh
set.seed
pernyataan di awal program sampai penulisan dan debugging selesai.Saat mengajar tentang simulasi. Jika saya ingin menunjukkan kepada siswa bahwa saya dapat mensimulasikan gulungan die fair menggunakan
sample
fungsi dalam R, saya bisa menipu, menjalankan banyak simulasi, dan memilih yang paling dekat dengan nilai teoritis target. Tetapi itu akan memberikan kesan yang tidak realistis tentang bagaimana simulasi benar-benar bekerja.Jika saya menetapkan seed di awal, simulasi akan mendapatkan hasil yang sama setiap kali. Siswa dapat mengoreksi salinan program saya untuk memastikan program itu memberikan hasil yang diinginkan. Kemudian mereka dapat menjalankan simulasi sendiri, baik dengan benih mereka sendiri atau dengan membiarkan program memilih tempat awal sendiri.
Sebagai contoh, probabilitas mendapatkan total 10 saat menggulirkan dua dadu yang adil adalahDengan sejuta eksperimen 2-dadu saya harus mendapatkan akurasi sekitar dua atau tiga tempat. Margin kesalahan simulasi 95% adalah sekitar2 √
Saat berbagi analisis statistik yang melibatkan simulasi. Saat ini banyak analisis statistik melibatkan beberapa simulasi, misalnya tes permutasi atau sampler Gibbs. Dengan menunjukkan benih, Anda memungkinkan orang yang membaca analisis untuk mereplikasi hasil dengan tepat, jika mereka mau.
Saat menulis artikel akademik yang melibatkan pengacakan. Artikel akademis biasanya melalui beberapa putaran tinjauan sejawat. Plot dapat menggunakan, misalnya, titik-titik yang dikocok secara acak untuk mengurangi plot berlebih. Jika analisis perlu sedikit diubah dalam menanggapi komentar pengulas, ada baiknya jika jittering yang tidak terkait tertentu tidak berubah di antara putaran ulasan, yang mungkin membingungkan bagi pengulas yang sangat rewel, jadi Anda menetapkan seed sebelum jittering.
sumber
TL; DR;
Benih biasanya memungkinkan Anda untuk mereproduksi urutan angka acak. Dalam pengertian itu, mereka bukan bilangan acak benar, melainkan "bilangan acak semu", karenanya merupakan PNR Generator (PNRG). Ini adalah bantuan nyata dalam kehidupan nyata!
Sedikit lebih detail:
Hampir semua generator nomor "acak" yang diimplementasikan dalam bahasa komputer adalah generator nomor acak semu. Ini karena diberi nilai awal (===> seed) mereka akan selalu memberikan urutan hasil pseudo acak yang sama. Generator yang baik akan menghasilkan urutan yang tidak dapat dibedakan - dalam hal statistik - dari urutan acak yang benar (melempar dadu yang benar, koin yang benar, dll).
Dalam banyak kasus simulasi, Anda ingin memiliki pengalaman "acak" yang sebenarnya. Namun, Anda juga ingin dapat mereproduksi hasil Anda. Mengapa? Yah, setidaknya regulator tertarik pada hal aneh itu.
Ada banyak tempat untuk menyelam. Orang-orang bahkan melakukan analisis ke dalam benih acak "terbaik". Menurut pendapat saya ini membatalkan model mereka karena mereka tidak dapat menangani perilaku acak "benar" - atau PRNG mereka tidak cocok untuk implementasi mereka. Sebagian besar waktu mereka hanya tidak melakukan simulasi yang cukup - tetapi mereka membutuhkan waktu.
Sekarang bayangkan RNG "benar". Orang bisa menerapkan ini berdasarkan jenis keacakan dalam mesin. Jika Anda hanya mengambil seed acak (misal waktu sekarang), Anda membuat semacam titik awal acak tetapi keacakan urutan masih tergantung pada algoritma untuk menentukan angka berikutnya. Ini lebih penting daripada titik awal dalam banyak kasus karena distribusi hasil menentukan "hasil" yang sebenarnya. Jika urutan Anda harus benar-benar acak, bagaimana Anda menerapkannya? Kutu jam komputer dapat dikatakan deterministik dan jika tidak, mungkin akan menunjukkan banyak korelasi otomatis. Jadi apa yang bisa kamu lakukan? Taruhan terbaik sejauh ini adalah menerapkan PNRG yang solid.
Komputasi Quantum? Saya tidak yakin itu akan memperbaikinya.
sumber