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 )
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,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 √
3 / 36 = 1 / 12 = 0,08333333.
2 ( 1 / 12 ) ( 11 / 12 ) / 106---------------√= 0,00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
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.
2^19937 − 1
. Benih adalah titik dari urutan yang sangat panjang di mana generator mulai. Jadi ya, itu deterministik.