Rastgele değişken üretim algoritmalarını test etmek için hangi yöntemler kullanılır?
Rastgele değişken üretim algoritmalarını test etmek için hangi yöntemler kullanılır?
Yanıtlar:
Diehard Testi Suite rasgele sayılarını test dalında Altın Standardı yakın bir şeydir. İyi bir rasgele sayı üretecinin, test edilmiş jeneratörü kullanan sonucun daha sonra karşılaştırılabileceği bazı bilgi dağılımına göre dağıtılmış sonuç üretmesi gereken bir dizi test içerir.
DÜZENLE
Tam olarak doğru olmadığım için bunu güncellemeliyim: Diehard hala çok kullanılıyor olabilir, ancak artık korunmuyor ve son teknoloji değil. NIST o zamandan beri bir dizi geliştirilmiş test geliştirdi .
Honk'un cevabına biraz eklemek için, Diehard Test Suite (George Marsaglia tarafından geliştirilen) PRNG için standart testlerdir.
Bu testlere erişmenizi sağlayan güzel bir Diehard C kütüphanesi var. Standart Diehard testlerinin yanı sıra, bit sırasını kontrol eden (diğer şeylerin yanı sıra) birkaç diğer PRNG testi için de fonksiyonlar sağlar. RNG'nin hızını test etmek ve kendi testlerinizi yazmak için bir tesis de vardır.
Dieharder kütüphanesinde RDieHarder adı verilen bir R arayüzü vardır :
library(RDieHarder)
dhtest = dieharder(rng="randu", test=10, psamples=100, seed=12345)
print(dhtest)
Diehard Count the 1s Test (byte)
data: Created by RNG `randu' with seed=12345,
sample of size 100 p-value < 2.2e-16
Bu, RANDU RNG jeneratörünün minimum mesafe / 2dsphere testinde başarısız olduğunu gösterir .
Rasgele sayı üreteçleri tarafından üretilen sayıları test etmek için Diehard testleri pratik bir yaklaşımdır. Ancak bu testler biraz keyfi görünüyor ve bir tanesi daha fazlasının dahil edilmesi gerekip gerekmediğini veya rastgele olup olmadığını gerçekten kontrol etmenin herhangi bir yolu olup olmadığını merak etmeye bırakılabilir.
Rastgele bir dizinin tanımı için en iyi aday Martin-Löf rasgeleliği gibi görünüyor . Bu tür bir rastgelelik için ana fikir, Knuth, bölüm 3.5'de güzel bir şekilde geliştirilmiştir , rastgele sayılar dizisinin her türlü alt sekansı için homojenliği test etmektir. O Alma alt diziler her tip tanımı doğru gerçekten zor olduğu ortaya çıktı bile hesaplanabilirlilik biri kullanımları kavramlar.
Diehard testleri, düşünülebilecek olası alt dizilerden sadece birkaçıdır ve başarısızlıkları Martin-Löf rasgeleliğini dışlayacaktır.
Kanıtlayamazsınız, çünkü bu imkansız; sadece utanç verici otokorelasyonlar veya dağıtım bozuklukları olup olmadığını kontrol edebilirsiniz ve gerçekten Diehard bunun için bir standarttır. Bu istatistik / fizik içindir, kriptograflar ayrıca (diğer şeylerin yanı sıra) gelecekteki değerleri elde etmek için jeneratörün verilere uymasının ne kadar zor olduğunu da kontrol edecektir.
Colin'in yazılan Küçük düzeltme: CRAN paket RDieHarder için bir arayüz DieHarder tarafından yapılan Diehard yeniden yazma / uzatma / revizyon Robert G. Brown (kim benim RDieHarder sargılar dayalı bir yazarlarından olarak nazik listeleri beni) David Bauer tarafından son katkılarıyla.
Diğer şeylerin yanı sıra, DieHarder, Mark'ın gönderisinde belirtilen NIST test pilini ve bazı yeni testleri içerir . Bu devam eden bir araştırma ve bir süredir. UseR'de bir konuşma yaptım! 2007, buradan alabileceğiniz RDieHarder hakkında .
Özette bir şeyin "rastgele" olduğu sonucuna varmak nadiren yararlıdır. Daha sık olarak, belirli bir tür rastgele yapıya sahip olup olmadığını test etmek istersiniz. Örneğin, bir şeyin tekdüze bir dağılımı olup olmadığını, belirli bir aralıktaki tüm değerlerin eşit derecede olası olup olmadığını test etmek isteyebilirsiniz. Veya bir şeyin normal dağılıma sahip olup olmadığını test etmek isteyebilirsiniz. Verilerin belirli bir dağılıma sahip olup olmadığını test etmek için ki kare testi veya Kolmogorov-Smirnov testi gibi bir uyum iyiliği testi kullanabilirsiniz.
Rasgele sayı üretecini test etmek için iki bölüm vardır. Sadece tek tip bir jeneratörü test etmekle ilgileniyorsanız, evet, DIEHARD test paketi gibi bir şey iyi bir fikirdir.
Ancak genellikle tek tip bir jeneratörün dönüşümünü test etmeniz gerekir. Örneğin, üstel veya normal olarak dağıtılmış değerler oluşturmak için tek tip bir jeneratör kullanabilirsiniz. Yüksek kaliteli düzgün bir jeneratörünüz olabilir - Mersenne Twister gibi iyi bilinen bir algoritmanın güvenilir bir uygulamasına sahip olduğunuzu - ancak dönüştürülmüş çıktının doğru dağılıma sahip olup olmadığını test etmeniz gerekir. Bu durumda Kolmogorov-Smirnov gibi bir çeşit uyum iyiliği testi yapmanız gerekir. Ancak yeni başlayanlar için, örnek ortalamanın ve varyansın beklediğiniz değerlere sahip olduğunu doğrulayabilirsiniz.
Çoğu insan kendi üniforma rasgele sayı üretecini sıfırdan yazmaz ve yazmaz. İyi bir jeneratör yazmak zordur ve iyi bir tane yazmadığınızı düşünmek için kendinizi kandırmak kolaydır. Örneğin Donald Knuth, TAOCP cilt 2'deki hikayeyi, korkunç olduğu ortaya çıkan rastgele bir sayı üreticisinin anlatıyor. Ancak insanların yeni bir dağıtımdan rastgele değerler üretmek için kendi kodlarını yazmaları yaygındır.
NIST istatistiksel testler bir listesini yayınlar C bir referans uygulama ile
Saygın PRNG araştırmacısı Pierre L'Ecuyer dahil olmak üzere bazı akıllı insanlar tarafından TestU01 de var . Yine, C'de bir referans uygulaması vardır.
Diğer yorumcular tarafından belirtildiği gibi, bunlar sahte rasgele bitlerin üretimini test etmek içindir. Bu bitleri farklı bir rastgele değişkene dönüştürürseniz (örneğin, Tekdüzen'den Normal'e Box-Muller dönüşümü), dönüştürme algoritmasının doğruluğunu onaylamak için ek testlere ihtiyacınız olacaktır.