Gerçekten rastgele sayılar üretmek neden imkansızdır?


47

Milyonlarca rasgele sayı üretmeyi gerektiren bir hobi problemini çözmeye çalışıyordum. Ama çabucak farkettim, onları eşsiz kılmak zorlaşıyor. Rasgele sayı üretimi hakkında okumak için Algoritma Tasarım Kılavuzunu aldım .

Tamamen anlayamadığım bir paragraf var.

Ne yazık ki, rastgele sayılar üretmek gerçekte olduğundan çok daha kolay görünüyor. Aslında, herhangi bir deterministik cihazda gerçekten rastgele sayılar üretmek temel olarak imkansızdır. Von Neumann [Neu63] en iyisini söyledi: “Rastgele rakam üretmenin aritmetik yöntemlerini düşünen herkes elbette bir günah durumundadır.” Umut edebileceğimiz en iyi sözde rasgele sayılardır; eğer rastgele üretildiyse.

Herhangi bir deterministik cihazda gerçekten rastgele sayılar üretmek neden imkansızdır? Bu cümle ne anlama geliyor?


86
Belirli bir aygıtta neden gerçekten rasgele sayı üretemediğinizi gerçekten soruyor musunuz ? Soru zaten cevabı içermiyor mu?
herby

37
Ürettiğiniz tüm sayıların benzersiz olması gerekiyorsa, gerçekten rastgele değillerdir. Gerçek bir rasgele sayı üretecinin aynı sonucu arka arkaya on kez vermesi tamamen mümkündür.
TMN

28
Eşsiz olan rasgele sayıları aramanın bir kusuru var . Eğer sayıları benzersiz olmak için zorluyorsanız, rastgele olmadıkları için rastgele değildirler , ne kadar olanaksız olursa olsun tekrarlama olanağını gerektirir .
Mark Booth,

13
Bilgisayarın dışında, rastgele herhangi bir sayı gerçekten rastgele mi? Bir kalıp atın, sadece vektörlerin olduğu bir fiziktir.
MPelletier

9
@ MPelletier: Tam değil. Kuantum mekaniği, (bir kez bilim adamları bunu daha fazla anladıktan sonra), rastgelelik tanımına bağlı olarak, gerçek rastgeleliğin varlığına işaret edebilir.
Brian

Yanıtlar:


65

Bir kriptografik olarak güvenli sözde rasgele sayı üreteci aramak gerekir . Çoğu PRNG, lineer uyum jeneratörleridir ( next numberlineer bir fonksiyondur previous number), yani eğer next numbervs previous numberçizerseniz, paralel çizgilerin bir grafiğini elde edersiniz. Bir CSPRNG bunu yapmayacak. Takas, yavaş olmaları.

Rasgele sayı üreticilerini 3 kategoride gruplandırıyorum :

  1. Ödev için yeterince iyi.
  2. Şirketinize bahis oynayabilecek kadar iyi.
  3. Ülkenizi oynayabilecek kadar iyi.

Herhangi bir deterministik cihazda gerçekten rastgele sayılar üretmek neden imkansızdır?

Deterministik bir cihaz, aynı başlangıç ​​koşulları ve girişler verildiğinde her zaman aynı çıktıyı üretecektir - olması gerektiği gibi deterministic. "Gerçekten rastgele sayı" daha çok felsefi bir bakış açısıdır, çünkü ne anlama geldiği random, felsefi göbek bakışının özüdür. hala). Kriptografik olarak güvenli bir rasgele sayı üreteci, aygıtı deterministik olmayan hale getirmek için bir miktar dış entropi kaynağı alacaktır.


1
Bu yüzden gerçekten rastgele bir sayı elde etmek imkansızdır. Bile dizisi için garanti edilmez asla tekrarlar, rasgele sayılar, aynı girdilerle Programın bir diğer çalışma olacaktır aynı sonucu verir. Böylece, başka biri daha sonra rastgele numaralarınızı çoğaltabilir , bu da gerçekten rastgele olmadığı anlamına gelir.
Spencer Rathbun

2
@ user973810 Bu bilginin bilgi teorisindeki sorunu, rastgele bir dizinin gerçek bir örneğini gösterememenizdir. Makul bir tanım dili için, hemen hemen her sonsuz dizinin (teknik anlamda) rastgele olduğunu ispatlayabiliriz, çünkü dilde tanımlanamaz. Daha faydalı olanı, rastgele bir dizi üreteci kavramıdır: rastgele bir dizi üreten değil, rastgele bir dizi üreten.
Gilles 'SO- kötülük'

13
Hafif nitpick: Bazı millet, yani nükleer ve parçacık fizikçileri, atomik çürüme gibi süreçlerin oldukça kesindir vardır gerçekten rastgele.
David Z

9
@David: Bundan biraz daha ileri gidebiliriz. Bell'in eşitsizliği üzerine yapılan çeşitli deneyler, belirli kuantum süreçlerinin kesin olarak tahmin edilemez olduğunu göstermektedir . Bazı felsefi anlamda rastgele olabilirler ya da yerel olmayan gizli değişkenlere bağlı olabilirler, ancak her iki durumda da güvenilir öngörmeyi engeller.
dmckee

7
@dmckee: evet, Bell'in eşitsizliği ile dalga fonksiyonu çöküşü arasındaki bağlantıyı prog.SE hakkındaki yorumlarında açıklamaya çalışmaktan uzak durmanın daha kolay olacağını düşündüm. İnsanlar merak ediyorlarsa sitemize her zaman gelebilirler ;-) Tangurena: Doğru, Einstein öyle demişti, ama bu gerçekten evrenin gerçekten determinist olmasını istediği anlamına geliyordu. Yine de değil. Einstein'ın ölümünden sonra yapılan deneyler oldukça kesin olduğunu göstermiştir (yerel olmayan gizli değişkenleri, diğer bir deyişle garipliği engellemektedir ). Sırf Einstein, her şeyde haklı olduğu anlamına gelmiyor.
David Z

22

Gerçek rastgelelik, kararsızcılık anlamına gelir. Eğer deterministikse, doğru bir şekilde tahmin edilebilir (determinizmin anlamı budur); Tahmin edilebilirse, rastgele değildir.

Deterministik sahte rastgele bir sayı üreticisinden elde edebileceğiniz en iyi şey, çok uzun bir döngüye sahip bir sayı akışıdır (RNG cihazınız sınırsız bir depolamaya sahip olmadıkça tekrarlanamaz) rastgele bir dizinin diğer tüm özelliklerini karşılayan akış numaraları (değerlerin en ilginç olanı düzgün bir dağılımı).

Bu sorunu çözmek için, birçok modern UNIX ve Unix-like, gerçek rastgelelik oluşturmak için fiziksel gürültü kaynaklarını kullanan çekirdek RNG'lere sahiptir.

Diğer bir yaygın yaklaşım, mevcut zamanı deterministik bir RNG ( srand(time(NULL));C cinsinden) için tohum olarak almaktır ; kriptografik olarak konuşursak, bu değersizdir, çünkü şimdiki zaman sır değildir, ancak fiziksel simülasyonlar veya video oyunları gibi şeyler için yeterince iyidir.


Sınırlandırılmış çıkış değerine sahip herhangi bir jeneratör (sınırlı sayıda) için tekrar etmemenin de mümkün olmadığını unutmayın. Fakat elbette, deterministik bir jeneratörün döngü uzunluğu büyük olasılıkla tüm muhtemel permütasyonlar olan teorik maksimum değerden çok daha kısadır.
9000,

@ 9000: Elbette bu doğru değil. İrrasyonel bir kullanım rakamı (herhangi bir temel) "rastgele" diziniz olarak kullanın. Boom! yinelenmeyen dizi (tanım gereği) ve hala sınırlı (tabanınıza).
ThePopMachine

@PopMachine: Sınırsız uzunluktaki sayıların tekrar etmeyen dizilimine eşdeğer herhangi bir uzunlukta bit dizisi üretebilir. Sınırsız büyüklükte, tam sayıların sınırlı olmayan bir dizisini oluşturamazsınız (örn. 32 bit); 32 bitlik değerlerin tüm permütasyonlarını oluşturduktan sonra, bir sıra tekrarlanmalıdır. Haklısın; biz sadece farklı şeylerden bahsediyoruz.
9000

@ 9000: Zayıflama yok. Yanlış olan bir battaniye açıklaması yaptınız. Gerçekten sadece orada denemek için n ^ k farklı uzunluklar için farklı uzunluk k dizileri daha fazla değildir ve bu nedenle tekrar gerekir, o zaman bu oldukça açık ve ilginç değil.
ThePopMachine

2
@ ThePopMachine: Biraz tonda olursanız sevinirim. Alıntı yapmak gerekirse, «sınırsız çıkış değerine sahip herhangi bir jeneratör (sınırlı sayıda)» için tekrarlanmamak da mümkün değildir. Açıkça bahsettiğiniz şey, irrasyonel bir sayının [ikili] rakamlarından oluşan bir dizi olarak sınırlandırılmamış bir bit sayısıdır. İfadeniz doğru olsa da, sorunla ilgisi yok.
9000

10

Kitabın ikinci bölümü Ayrık-Olay Simülasyonu: Bir İlk Ders Lawrence Leemis tarafından (daha doğrusu, psuedo rasgele sayı üreteçleri) rastgele sayı üreteçleri için harika giriş yapmaktadır.

Kitabından bir alıntı, bence iyi açıklıyor:

Tarihsel olarak üç tip rasgele sayı üreteci, hesaplama uygulamaları için önerilmiştir: (a) örneğin, bir milyon rastgele basamağın RAND şirket tablosu gibi 1950'lerin stili tablo arama jeneratörleri; (b) örneğin termal "beyaz gürültü" cihazları gibi donanım jeneratörleri; ve (c) algoritmik (yazılım) jeneratörleri. Bu üç tipten sadece algoritmik jeneratörler yaygın kabul görmüştür. Bunun nedeni, yalnızca algoritmik jeneratörlerin aşağıdaki genel kabul görmüş rasgele sayı üretme kriterlerini yerine getirme potansiyeline sahip olmasıdır. Bir jeneratör şöyle olmalı:

  • rastgele - rastlantısallığın bütün makul istatistiksel testlerini geçen çıktılar üretebilir;
  • kontrol edilebilir - istenirse çıktısını yeniden üretebilir;
  • taşınabilir - aynı çıktıyı çok çeşitli bilgisayar sistemlerinde üretebilir;
  • verimli - hızlı, minimum bilgisayar kaynak gereksinimi ile;
  • belgelenmiş - teorik olarak analiz edilmiş ve kapsamlı bir şekilde test edilmiştir.

Bu nedenle, "daha iyi" rasgele sayılar elde etmek için beyaz gürültü üreteci kullanmak mümkün olsa da, yukarıdaki kriterlerin çoğuna uymadıkları için kabul görmediler.

Ellerini kitabın bir kopyasına (veya benzer bir şeye) koymanı tavsiye ederim. PRNG'nin çalışmalarının kesinlikle çabalarınızda size nasıl yardımcı olacağını tam olarak anlamak.


7

Çünkü rastgele sayılar oluşturmak için kod yazmanız gerekir ve Kod rastgele DEĞİLDİR . (Bu deterministik)

Böylece, "Rastgele" (genellikle geçerli zaman damgası) 'dan seçilen bir "Tohum değeri (değerleri) ile başlıyorsunuz, daha sonra sayı üretmeye başlamak için bir algoritmada kullanıyorsunuz. Ancak bütün set orijinal Tohum değerine dayanıyor!

Bu nedenle , kodunuzu aynı Tohum değerleriyle aynı şekilde tekrar çalıştırırsanız, aynı EXACT sayı setini elde edeceksiniz! Makul bir kişi buna rastgele diyebilir mi? Ama kesinlikle öyle BAKIŞ rasgele.


Onları eşsiz kılmakla ilgili, Bir sayı oluşturduktan sonra, zaten bu sayıya sahip olup olmadığınızı kontrol edin, eğer varsa, onu atın ve yeni bir tane oluşturun.


13
Artı tarafta, tekrarlanabilir sözde rasgele sayılar hata ayıklama için harika olabilir.
David Thornley

5

Rasgele sayılar ürettiğiniz için, oluşturulan değerlerin benzersiz olmamasını beklemelisiniz. Bu, rastgele bir özelliktir - gerçekten rastgele (veya hatta sözde rastgele) sayıların bir dizisinin benzersiz olduğunu söyleyemezsiniz, çünkü bu gereksinim, aralıktaki son değerin tahmin edilmesine izin vermesinin yanı sıra olasılığını değiştirmesini de sağlar. her seçili olmayan sayı, her biri yeni bir tane seçildiğinde.


1
Bu aslında bir cevabı değil, aslında bir cevabı değil .
Mark Booth,

5

Sözde Rastgele'nin çok basit bir tanımına sahibim :

Tahmin etmek için çok fazla bilinmeyen değişken var.

Ayrıca Basit Rastgele bir tanımım da var :

Sonsuz bilinmeyen değişkenler.

Bir bilgisayardaki sorun her zaman TÜM değişkenleri bilmesidir. Rastgele sayı basitçe bazı tohum değerlerinin matematiksel bir fonksiyonudur .
Yapabileceğimizin en iyisi, bilgisayara, genellikle tahmin edemediğimiz bir değişkene (kesin zaman gibi) dayanan sahte rastgele bir tohum değeri vermektir.

Bir bilgisayar kesinlikle rastgele bir sayı oluşturamasa da, tahmin etmek için çok fazla değişken sunmakta fayda var!


1
Eh, "zaman" tahmin edilemeyecek bir şeye kötü bir örnektir. Fare hareketi, mikrofon girişi vb. Tahmin edilebilir olmayan girdilerdir.
HoLyVieR

3

Gerçekten rastgele sayılar oluşturuluyor yazılımda Diğerleri işaret olarak ancak gerçekten rastgele sayılar üretebilirsiniz bir cihaz yapmak için donanım ile mümkündür, gerçekten de mümkün değildir *. İnternette bunun birkaç örneği var ve kullanılmayan bir alıcının beyaz gürültüsünü (çoğunlukla evrenden gelen arka plan ışınımı) örneklemeye kadar Geiger sayacındaki keneleri okumaktan geçen zamana kadar çeşitli yöntemler var. Kendimi bir kaç yöntem kullanarak birkaç tane inşa ettim .

* Herhangi bir iyi fizik meraklısı, evrenin işleyiş şekliyle bunlardan hiçbirinin aşırı teknik olmadığının gerçekten rastlantısal olmadığını, ancak sonuçları tahmin etmenin makul bir yolu olmadığını, bu nedenle bu tartışma için yeterli olduklarını işaret edecektir.


5
Yarı zamanlı bir fizik meraklısı olarak, kuantum olaylarına dayanan jeneratörler (söyleyebildiğimiz kadarıyla) gerçekten rastgeledir. Rasgele olmaktan hoşlanmayan insanlar, başladığı günden bu yana kuantum mekaniğinden rastgele olmayı çıkarmaya çalışıyorlar ve tüm yaptığı, rastgele olduğuna dair daha fazla kanıt biriktiriyor.
David Thornley

@DavidThornley, ... birileri formülü bulana kadar.
CaffGeek

1
@Chad: Her zamanki anlamda bir formül yoktur; EPR deneyleri tarafından dışlandı. Kesinlikle hepsinin deterministik olduğu, ancak kolayca anlaşılabilir bir şekilde olmadığı düşünülebilir.
David Thornley

@DavidThornley, bunun yanlış bir kelime olduğunu biliyordum. Sanırım ne söylemeye çalıştığımı biliyoruz. Neredeyse birileri bir şeyin imkansız olduğunu söylediğinde, başkası sonunda yanlış olduğunu ispatlar. Bu insan doğası.
CaffGeek

2
Bu, sonunda birinin durma problemini çözebilecek bir makine yapacağını söylemek gibi bir şey, çünkü biri imkansız olduğunu söyledi. Denklemi bulma meselesi değil, aslında yapılan tüm deneylere göre rasgele ve onu destekleyen matematik.
Alex,

2

Özel bir donanım olmadan rastgele bir sayı üretmenin imkanı yoktur. Birinci sınıf yıllarımda birkaç sınıf arkadaşı ve temelde bir AM alıcısı olan ve 4 farklı kanala ayarlanmış, A - D dönüştürücüsüne girişi alıp hepsini ekleyen rastgele bir sayı üreteci önerdim (maksimum numaranızı modüle edin). İsteğe bağlı herhangi bir sayıda istasyondan gelen analog girişin kombinasyonu rastgele olduğundan ve A2D dönüştürücüsünden çok sayıda rastgele sayı üretebildiğimiz için bunun iyi bir jeneratör olabileceğini düşündük. Elbette, bu bile felsefi anlamda gerçekten rastlantısal değildir, ancak en pratik amaçlar için işe yarayabilir.


2

Determinizm esasen bir fonksiyondur. Cebir'den, bir işlevin, bir alan ile aralık arasındaki bir yazışma olduğunu, böylece alanın her üyesinin aralığın tam olarak bir üyesine karşılık geldiğini unutmayın.

Öyleyse, eğer f (x) = z, y, z değilse f (x)! = Y. Bu bir fonksiyondur. JavaScript'i düşünün:

function Add(A, B) {
      return A + B;
}

var addedNumber = Add(2,3);//returns 5
addedNumber = Add(2,3);//still 5

Kaç kere çağırdığınızın önemi yoktur Add(2,3), her zaman 5 döndürür. Başka bir deyişle, Add () deterministik bir fonksiyondur.

Dış faktörler, Add'in deterministik olmayan bir şekilde davranmasını sağlayabilir. Örneğin, çok okuyucuyu denklemin içine sokarsanız. İnsan girişi de determinizme neden olur.

Şimdi, olayların ilginçleştiği yer burası.

“Rastgele rakam üretmenin aritmetik yöntemlerini düşünen herkes elbette günah durumundadır.”

Not Not Von Neumann, "[[]]" üretiminin aritmetik yöntemleri. Bu, insan girdisi, eşzamanlılık, kesin bir araçtan okunan örnek rüzgar hızları ya da deterministik bir işleve rastgele girdi üretmenin diğer algoritmik olmayan yollarından bahsetmiyor .

Bu sadece bir fonksiyonun veya fonksiyon sisteminin bir anda determinist olamayacağını belirtir. Başka bir deyişle, Ekle (2,3) bir şekilde 6 veya aynı girdiler verildiğinde 5'ten başka bir şey döndürmez . İmkansız.

Alıntı yapan yazar bir adım daha ileri götürür.

Umut edebileceğimiz en iyi şey, rasgele oluşturulmuş gibi görünen bir sayı akışı olan sözde rastgele sayılardır.

Bağlam daha önce “herhangi bir belirleyici aygıtta” olarak tanımlandı. Tartışmayı burada sonlandırabilirim. Ancak, sisteme yeni bir öğe ekleyerek içeriği değiştirirsek ne olur? Girdi olarak eklenen deterministik olmayan bir eleman sistemi deterministik olmayan bir sistem yapar. Her ne kadar deterministik olmayan elementleri kaldırarak deterministik bir sisteme geri dönüyoruz. Bir şekilde girdileri izleyebilir veya başka şekilde çoğaltabilirsek, bir sonucu çoğaltabiliriz. Ancak bu paragrafın tamamı yazarın söylediklerine göre tedirgindir. İçeriği hatırla.

Bir kimse determinizm dışılığın anlamı üzerinde tartışabilir. Bir kez daha, tangetenial. İçeriği hatırla.

Demek haklı. Herhangi bir deterministik cihazda , deterministik bir sistemin gerçek rastgele bir sonuç vermesi imkansızdır.

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.