Rasgele sayı üretecindeki bir tohum tam olarak nedir?


21

Her zamanki google aramayı vs. denedim, ancak bulduğum cevapların çoğu Python veya C ++ gibi belirli bir şekilde belirsiz ya da dile / kütüphaneye stdlib.haitti.

Örnek olarak, çoğu tohumun rastgele sayı üretecinin başlangıç ​​noktası olduğunu ve aynı tohumun her zaman aynı rastgele sayıyı ürettiğini söylüyor . Bunun anlamı ne? Çıktı sayısının belirli bir tohumun deterministik bir işlevi olduğu ve rasgeleliğin tohumun değerinden geldiği anlamına mı geliyor? Fakat durum buysa, tohum sağlayarak, makinanın yapmasına izin vermek yerine rastgeleliği yaratan biz programcılar değil miyiz?

Ayrıca, bu bağlamda bir başlangıç ​​noktası ne anlama geliyor? Bu, eşlemesinin etki alanının bir öğeyi söylemenin kesin bir yolu mu? Yoksa yanlış bir şey mi alıyorum?xXf:XY


7
Bir cevap yazmak için nitelikli olduğumu hissetmiyorum, ancak Mersenne Twister aydınlanmasına ilişkin Vikipedi makalesini , özellikle de kullanıma hazırlama bölümünü bulabilirsiniz . Kısacası, Mersenne Twister gibi sahte bir sayı üreteci sonunda çıktısını tekrarlayacaktır. MT durumunda sürenin uzunluğu vardır 2^19937 − 1. Tohum, jeneratörün başladığı bu son derece uzun dizinin noktasıdır. Yani evet, determinist.
IonicSolutions

1
Sözde rasgele bir sayı üreteci, sonsuz sayıda yinelenen sabit sayı listesidir. Nerede başlıyor? Söyleyeceksin.
whuber

2
@whuber Aslında yorumunuzu büyük bir cevap olacağını düşünüyorum.
David Z,

Yanıtlar:


22

Çoğu sözde rasgele sayı üreteci (PRNG) , "tohum" olarak adlandırılan bir girdi tarafından belirlenen bir temel değerden başlayan bir tür özyinelemeli yöntem içeren algoritmalar üzerine kuruludur . Çoğu istatistiksel yazılımda (R, Python, Stata, vb.) Varsayılan PRNG, Matsumoto ve Nishimura'da (1998) ortaya konan Mersenne Twister algoritması MT19937'dir . Bu karmaşık bir algoritmadır, bu yüzden ayrıntılı olarak nasıl çalıştığını bilmek istiyorsanız, kağıt üzerinde okumak en iyisi olacaktır. Bu özel algoritmada derecesinin bir tekrarlama ilişkisi vardır ve girdi tohumunuz bir başlangıç ​​vektörleri kümesidir: . Algoritma, aşağıdakileri üreten bir doğrusal yineleme ilişkisi kullanır:x 0 , x 1 , . . . , x n - 1nx0,x1,...,xn1

xn+k=f(xk,xk+1,xk+m,r,A),

burada ve ve algoritmada parametreler olarak belirtilebilecek nesnelerdir. Tohum ilk vektör setini (ve algoritma için diğer sabit parametreler verilmiş) verdiğinden, algoritma tarafından üretilen sözde rasgele sayılar dizisi sabittir. Eğer tohumu değiştirirseniz, algoritma tarafından üretilen sahte rasgele sayıları değiştiren ilk vektörleri değiştirirsiniz. Bu, elbette, tohumun işlevidir.r1mnrA

Şimdi, bunun MT19937 algoritmasını kullanarak bunun sadece bir örnek olduğunu not etmek önemlidir. İstatistiksel yazılımda kullanılabilecek birçok PRNG vardır ve bunların her biri farklı özyinelemeli yöntemler içerir ve bu yüzden tohum, her birinde farklı bir şey anlamına gelir (teknik açıdan). Şunlar için PRNGs bir kütüphane bulabilirsiniz Riçinde bu belgelerin mevcut algoritmalar ve bu algoritmaları açıklayan kağıtları listeler.

Tohumun amacı, kullanıcının kopyalanabilir analize izin vermek için sahte rasgele sayı üretecini "kilitlemesine" izin vermektir. Bazı analistler, tohumu , ilk tohum sayısını üretmek için donanım girişlerini kullanan gerçek bir rasgele sayı üreteci (TRNG) kullanarak ayarlamak ve bunu kilitli bir sayı olarak bildirmek ister. Tohum orijinal kullanıcı tarafından ayarlanır ve raporlanırsa, bir denetçi analizi tekrarlayabilir ve orijinal kullanıcı ile aynı sahte rastgele sayı dizisini elde edebilir. Eğer tohum ayarlanmazsa, algoritma genellikle bir tür varsayılan tohum kullanacaktır (örneğin, sistem saatinden) ve genellikle randomizasyonu çoğaltmak mümkün olmayacaktır.


+1. Bir tanesi açıkça tohum sağlamazsa, (genellikle) ne olacağını eklemek iyi olacaktır.
amip diyor Reinstate Monica

1
@ amoeba: Cevabımın dördüncü fıkrası, bunu kısaca tartışıyor.
BruceET

1
Bu soruya cevap verirken, soruların temelleri, simülasyonlarda buna neden ihtiyaç duyduğumuz gerçeğine dokunmuyor. DOĞRU rastgelelik üretmek çok zordur - ve buna sahip olduğunuzda orijinal cevabı çoğaltamazsınız! PNRG'ye giriniz ... tüm problemleri ile birlikte.
Paul Palmpje

@ amoeba: İstendiği gibi, bunun etini çıkarmak için ek bir paragraf ekledim.
Monica'yı

1
Teşekkürler. "Varsayılan tohum", her zaman aynı varsayılan tohum değeri gibi ses çıkarır; Demek istediğim, genellikle tohumun sistem saatinden alındığı. Bu bence bilmek iyidir.
amip diyor Reinstate Monica,

16

İlk olarak, günümüzün bilgisayarında "rastgele sayılar" oluşturduğu gerçek rastgelelik yoktur . Tüm sözderandom jeneratörleri deterministik yöntemler kullanır. (Muhtemelen, kuantum bilgisayarları bunu değiştirecek.)

Zor olan iş, gerçekten rastgele bir kaynaktan gelen verilerden anlamlı bir şekilde ayırt edilemeyen çıktı üreten algoritmalara ulaşmaktır.

Bir tohum ayarlamanın sizi uzun bir sözde rasgele sayılar listesinde belirli bir başlangıç ​​noktasında başlatması konusunda haklısınız. R, Python ve benzerlerinde uygulanan üreticiler için liste oldukça uzundur. Yeterince uzun, mümkün olan en büyük simülasyon projesinin bile, jeneratörün "periyodunu" geçmeyecek, böylece değerler yeniden çalışmaya başlayacaktır.

Pek çok sıradan uygulamada, insanlar tohum koymuyorlar. Ardından tahmin edilemeyen bir tohum otomatik olarak toplanır (örneğin işletim sistemi saatindeki mikrosaniyelerden). Genel olarak kullanılan sahte jeneratörler, daha önce tatmin edici olmayan jeneratörlerle taklit edilmesinin zor olduğu problemlerden oluşan test bataryalarına maruz bırakılmıştır.

Genellikle, bir jeneratörün çıktısı, pratik amaçlar için, rastgele bir biçimde rastgele seçilen sayılardan ayırt edilebilir olmayan değerlerden oluşurDaha sonra bu sahte numaralar manipüle edilir, böylece binom, Poisson, normal, üstel, vb. Gibi diğer dağıtımlardan rastgele örnekleme yapılanlarla eşleşilir.(0,1).

Bir jeneratörün bir test aşağıdaki gibi gerçekleştirilir gözlemlerine 'de art arda gelen çiftleri olmadığını görmek için aslında bir nokta bunlar rastgele birim kare doldurma gibi. (Aşağıda iki kez yapılır.) Hafif mermer görünüm doğal değişkenliğin bir sonucudur. Tamamen düzgün bir şekilde gri görünen bir komplo elde etmek çok şüpheli olurdu. [Bazı çözünürlüklerde, düzenli bir hareli desen olabilir; Bu sahte etkiden kurtulmak için lütfen büyütmeyi yukarı veya aşağı değiştirin.]Unif(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))

görüntü tanımını buraya girin

Bir tohum ayarlamak bazen yararlı olabilir. Bu tür bazı kullanımlar aşağıdaki gibidir:

  1. Programlama ve hata ayıklama sırasında öngörülebilir çıktıya sahip olmak uygundur. Birçok programcı set.seed, programın başlangıcına yazma ve hata ayıklama işlemi yapılıncaya kadar açıklama yaptı.

  2. Simülasyon hakkında öğretirken. Öğrencilere, sampleR'deki işlevi kullanarak adil bir kalıp rulosunu taklit edebileceğimi göstermek istersem, hile yapabilir, birçok simülasyon çalıştırabilir ve hedef teorik değere en yakın olanı seçebilirim . Ancak bu, simülasyonun gerçekte nasıl çalıştığı hakkında gerçekçi bir izlenim bırakmaz.

    Başına bir tohum koyarsam, simülasyon her seferinde aynı sonucu alır. Öğrenciler, amaçlanan sonuçları verdiğinden emin olmak için programımın kopyasını yazabilirler. Daha sonra, kendi simülasyonlarını kendi tohumlarıyla ya da programın kendi başlangıç ​​yerini seçmesine izin vererek çalıştırabilirler.

    Örneğin, iki adil zar toplam 10 alma olasılığıBir milyon 2-zar deneyinde yaklaşık iki ya da üç basamaklı bir doğruluk elde etmeliyim. % 95 simülasyon hatası payı yaklaşık2

    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.
    
  3. Simülasyon içeren istatistiksel analizleri paylaşırken. Günümüzde birçok istatistiksel analiz bazı simülasyonları, örneğin bir permütasyon testi veya bir Gibbs örnekleyici içerir. Çekirdeği göstererek, analizi okuyan kişilerin, isterlerse sonuçları tam olarak çoğaltmalarını sağlarsınız.

  4. Randomizasyon içeren akademik makaleler yazarken. Akademik makaleler genellikle birden fazla hakem değerlendirmesi sürecinden geçer. Bir komplo, örneğin aşırı lekelenmeyi azaltmak için rastgele pürüzlü noktaları kullanabilir. İncelemecilerin yorumlarına cevap olarak analizlerin biraz değişmesi gerekiyorsa, belirli bir ilgisiz jitter yorumunun inceleme turları arasında değişmemesi iyi olur, özellikle nitpicky hakemlerine rahatsız edici olabilir, bu yüzden jitter işleminden önce bir tohum koyarsınız.


1
Çok hoş, +1. Dördüncü bir nokta ekleme özgürlüğünü aldım.
S. Kolassa - Monica'yı yeniden kurun

Yani, sahte bir sayı üretecinin temelde rastgele sayının periyodik bir dizisini ([0, 1] 'e eşit dağılıma) sakladığını ve bir tohumun sadece dizinin bir indeksi olduğunu mu kastediyorsunuz? Yani üretilen rastgele sayının tohumun deterministik bir işlevi olduğu anlamına mı geliyor?
Della

9
Rastgele bir jeneratöre sahip olmak için kuantum fenomenini kullanmak için kuantum bilgisayara ihtiyacınız yoktur ( en.wikipedia.org/wiki/Hardware_random_number_generator )
Guiroux

1
@Della. Esasen doğru fikre sahipsiniz. Fakat lütfen pratikte 'dönemin' çok büyük olması gerektiğini anlayın. (Simülasyon projeniz ne kadar büyük olursa olsun, tekrarlamak istemezsiniz.) Örneğin, IonicSolutions, Mersenne Twilster jeneratörünün Q dan sonra, kolayca görselleştirebileceğimden biraz daha büyük olduğu dönemine sahip olduğunu . // Eğer tohumunu biliyorsanız, oradan sahte ve sahte sekansı üretebilirsiniz. // Jeneratörler mesajları şifrelemek için kullanılmıştır. Ancak, şifreleme için güvenli üreticiler için standartlar, olasılık simülasyonu için üreticiler için standartlardan farklıdır. 2199371,
BruceET

@Guiroux. Kuantum bilgisayarlardan bahsetmeye çalıştığım olasılık, bugünün sözderandom jeneratörleri kadar hızlı gerçek rasgele sayı üreteçlerine sahip olmaktı. 1950'lerde, deneysel tasarımdaki randomizasyon ve (yavaş, sınırlı) prob simülasyonları için 'gerçek' rastgele sayılar kaynakları kullanıldı. Belki Milyon Rastgele Basamağa bakınız .
BruceET

0

TL; DR;

Bir tohum genellikle rastgele sayılar dizisini çoğaltmanıza olanak sağlar. Bu anlamda gerçek rasgele sayılar değil, "sahte rasgele sayılar" dırlar, dolayısıyla bir PNR Üreticisi (PNRG). Bunlar gerçek hayatta gerçek bir yardım!

Biraz daha detay:

Bilgisayar dillerinde uygulanan hemen hemen tüm "rasgele" sayı üreteçleri sahte rastgele sayı üreteçleridir. Bunun nedeni, başlangıç ​​değeri (===> tohum) verdiklerinde, her zaman aynı sözde rastgele sonuç dizisini sunmalarıdır. İyi bir üretici, istatistiksel olarak, gerçek bir rastgele diziden (gerçek bir kalıp atma, gerçek para, vb.) Ayırt edilemeyecek bir dizi üretecektir.

Birçok simülasyon durumunda gerçek bir "rastgele" deneyim yaşamak istersiniz. Ancak, sonuçlarınızı yeniden üretebilmek de isteyebilirsiniz. Niye ya? En azından düzenleyiciler bu tuhaf şeyle ilgileniyorlar.

Dalmak için çok şey var. İnsanlar bile "en iyi" rastgele tohum için analiz yaparlar. Bence bu, onların "gerçek" rastgele davranışları yerine getiremedikleri için modellerini geçersiz kılıyor - ya da PRNG uygulamaları için uygun değil. Çoğu zaman sadece yeterince simülasyon yapmazlar - ama zaman alırlar.

Şimdi bir "gerçek" RNG düşünün. Biri bunu makinedeki bir çeşit rastlantısallığa dayanarak uygulayabilir. Sadece rastgele bir tohum alırsanız (örneğin şimdi), bir tür rastgele başlangıç ​​noktası yaratırsınız, ancak dizilimin rastgeleliği hala bir sonraki sayıları belirleyen algoritmaya bağlıdır. Sonuçların dağılımı gerçek "sonucu" belirlediğinden çoğu durumda başlangıç ​​noktasından daha önemlidir. Sıralamanız gerçekten rastgele olsa, bunu nasıl uygularsınız? Bir bilgisayarın saat kenelerinin deterministik olduğu söylenebilir ve aksi takdirde muhtemelen çok fazla oto-korelasyon gösterecektir. Ne yapabilirsin? Şimdiye kadarki en iyi bahis katı bir PNRG uygulamak.

Kuantum hesaplama? Bunu düzelteceğinden emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.