İnsan beyni için rastgele sayı üretme algoritması? [kapalı]


37

İnsanların rasgele sayılar üretmelerine izin veren pratik, öğrenmesi kolay "kafa içi" algoritmaların farkında mısınız ya da geliştirdiniz mi? "Kafa içi" derken .. tercihen herhangi bir harici alet veya cihaz olmadan. Ayrıca, yüksek bir çıktı (dakika başına birçok rasgele sayı) istenir.

SO sordu ama fazla ilgi alamadım. Belki bu programcılar için daha uygundur.


7
@ S.Lott Hiç saçma olduğunu sanmıyorum. Kullanışsız? Tabii ki neden. Absürt? Kesinlikle değil. Olsa bile, saçmalık yeni, faydalı düşüncelerin önünü açabilir.
biziclop

21
9 .... 9 .... 9 .... 9 - Rastgele olmadığını ispatlayamazsınız.

13
S.Lott: Sözde rasgele sayı üretecini hesaplamak için kolay bir fikir hiç de saçma değil. Bence OP burada insan önyargısından korunmak için bir yol istiyor ....
Jens

8
Kaç kişinin cehalet argümanına değer verdiğini görünce komik buluyorum (ve aynı zamanda biraz iç karartıcı). “Hayal edemiyorum, bu yüzden var olamaz” veya noktayı tamamen eksik olan cevaplar.
biziclop

4
Bu soru konu dışı gibi görünüyor çünkü bir bireyin bilişsel yetenekleri ile ilgili ve programlama değil.

Yanıtlar:


36

İşte George Marsaglia'dan bir algoritma :

2 basamaklı bir sayı seçin, 23, "tohum" deyin.

Yeni bir 2 basamaklı sayı oluşturun: 10 rakamı artı birim rakamının 6 katı.

Örnek sıra 23 -> 20 -> 02 -> 12 -> 13 -> 19 -> 55 -> 35 -> ... şeklindedir.

ve periyodu, çarpanın (6), artılar grubundaki göreceli olarak, modül 10'a en yüksek olduğu durumdadır (bu durumda 59).

"Rastgele basamaklar", 2 basamaklı sayıların, yani 3,0,2,2,3,9,5, ... sıra mod 10'un birim rakamlarıdır. Aritmetik, cihazınızda gerçekleştirecek kadar basittir. kafası.


Bu gerçekten iyi geliyor.
biziclop

4
Bu, belirli bir kişinin ihtiyaçları için bir sorun olmayabilir, ancak bu yalnızca 90 farklı akış sağlar.
compman

5
79, 79, 79, 79, 79, 79, 79, 79, 79, 79, oh noes! Sanırım, <= 60 kalmanız gerekiyor, ki bu iyi sonuç veriyor çünkü saatiniz bir tohum için kullanmıyorsanız kullanabilirsiniz.
ed

4
@eds Um, ne? 79 -> 61 -> 15 -> ...
Izkata

1
Belki de @eds 59 anlamına geliyordu. 1-58 arasındaki tüm sayılar adil bir oyun gibi görünüyor.
Erhannis

26

Geomancy hakkındaki bu makaleye göz atın . Özellikle Geomantic çizelgeleri oluşturma bölümü . İkili basamakları ve bazı basit özyinelemeli hesaplamaları kullanarak sözde rasgele sayı üretme tekniğini içerir. Bunu, kafanızda oldukça kolay bir şekilde yapabildiğiniz görülüyor (bir kağıt parçası yardımcı olsa da).

Feragatname: Kendim denemedim; Yeterince rastgele bir sayıya ihtiyacım olduğunda, ya bir çıktı alırım /dev/random, randhangi dili kullanırsam kullanırım ya da güvenilir d20'mi alırım.

Bir matematik dehasıysanız, Orta Kare yöntemi , oldukça güvenilmez bir yöntemse, oldukça hesaplamalı bir ışıktır.


3
+1 Bunun, bu sorunun ilk ciddi cevabı olduğunu düşünüyorum. Biraz üzgün.
Jens

@Magnus Wolffelt - Ron Eglash'ın TED konuşmasında Afrika'daki fraktal geometrinin kültürel önemi hakkında konuştuğunu hatırladım; "Bamana Sand Divination". Oldukça ilginç, yine de artık bu tekniğe ne kullanacağınız hakkında hiçbir fikrim olmasa da, artık daha fazla kimseye ihtiyacımız yok. ted.com/talks/ron_eglash_on_african_fractals.html
Inaimathi

1
Görebildiğim kadarıyla, bu jeomantik yöntem basitçe 'iyileştirme' ('debias'ın daha iyi bir terim olacağını varsayalım') rastgele bir kaynaktır. Hapşırmamak, fakat OP'nin aradığı şey değil. Güzel değil demek değil ki ....
Norman Gray

@Norman Gray - İnsan beyni, varsayılan olarak önyargılı rasgele sayılarla gelebilir.
Inaimathi

@Inaimathi Kesin olarak: bu nedenle parçalanma rakamlarının önemli olmasının ve işaret ettiğiniz yöntemin faydalı olmasının nedeni budur. Yoksa seni yanlış anlıyorum.
Norman Gray

10

Bence makul bir varsayım, beyninizde sakladığınız çok sayıda sözel bilgiye güvenmeniz gerektiğidir. Kaynak herhangi bir şey olabilir, şarkı sözleri, şiirler, Monty Python eskizleri, ama kalbinden bildiğiniz bir şey olmalı.

Öyleyse, bilinçli önyargıyı mümkün olduğunca ortadan kaldırarak, oldukça rastgele bir bölümünü seçmelisiniz. Örneğin bunu yapmanın bir yolu, bir şarkı seçmek, k10 ile 20 arasında bir sayı seçmek ve sonra o kşarkıyı şarkı sözlerinde bulmak olacaktır .

Açıkçası bu, harflerin sıklığı farklı olduğu için kendi içinde düzgün bir dağılım vermeyecek, ancak yine de rastgele bir harf, ya da en azından dış kaynak olmadan mümkün olduğuna inandığım kadar yakın.

Güncelleme: Bu arada, insanlardan madalyonun fırlattığı rastgele bir sıralama dizisi yazmaları istendiğinde, şu ana kadarki en yaygın hata sıranızı "çok rastgele" yapmaktır: aynı sonuçların yayınları çok kısa olacaktır; analizler ortaya çıkacak. Bu yöntem temel olarak bu tuzaktan kaçınmayı amaçlar. Elbette, bu çalışma uzunluğu yanlılığının gölgesinden başka anomaliler de ortaya çıkabilir, ancak onları bulmak için uygun deneylere ihtiyacınız olacaktır. Biraz ironik olarak, tek başına düşünerek rastgele sayılar üretmek için bir algoritma tek başına düşünerek bulunamaz.


O zaman bile, bir dizi ince yolla önyargılı olmanızı beklerdim. (IE aynı şarkı grubunu seçme eğilimindedir)
Zachary K

@ Zachary K Şüphesiz, ama sonra biraz da yayılan bir numara seçmeniz gerekir. Önyargı hiçbir zaman giderilemese de, bu yöntem kesinlikle hangi mektubu seçeceğinizi bilmenizi engeller (zamanla bazılarını ezberlemek zorunda kalmanıza rağmen).
biziclop

Eini mini miny moe, çocukken yaptığımız gibi.
Zachary K,

2
"10 ile 20 arasında bir k numarası seç". 17. En az rastgele sayı.
S.Lott

@ S.Lott Bu sayının ne kadar rastgele olduğu önemli değil. İhtiyacınız olan tek neden, şeylerin ilk birkaç harfini daha kolay hatırlama eğilimindedir.
biziclop

9

Saatini örnekle.

Bunu 60 (saniye) faktörü olan rastgele bir sayıya ihtiyacım olursa yaparım. Her ne zaman olursa olsun uygun modülo al. 4:17:23 PM, bir kalıp rulosunu simüle eder, 5 olur.


Ve dakikada çok fazla sayıda?
Gary Rowe

Takip ettiğimden emin değilim. Dakikalar dahil 3600 numara havuzunu mu diyorsun? Sanırım, ama sayı ne kadar büyük olursa o kadar az rastgele olur mu? Mesela hızlı bir şekilde numuneleri kolayca alamazdın.
Mark Canlas

1
@Gary Rowe Korkarım ki bu kriterler hurdaya alınmalı, çünkü kullanılan yöntem ne olursa olsun, insan beyni çok yavaş.
biziclop

Üzgünüm, dakikada 60 rakamdan fazlasına ihtiyacınız olursa, yaklaşımınızın nasıl çalıştığını merak ediyordum. Görüştüğünüzde, bir insan beyninden dakikada birçok sayı üretmesini istemek zaten en üst düzeye çıkacaktır, bu yüzden endişelenmeyin.
Gary Rowe

@biziclop Sorun yok. @ Mark'ın yaklaşımındaki durumu göz önünde bulundurarak bir yorum çarpışma yaşadım gibi görünüyor.
Gary Rowe

5

Mükemmel soru Korkarım ki iyi bir cevap çok zor olabilir.

Ancak bir başlangıç ​​olarak, iki kişi dahil olduğunda “gerçek” rastgelelik oluşturmak oldukça kolaydır: basitçe birisinin kafa modülünde sessizce saymasına izin verin, diğeri ise keyfi bir aralıktan sonra “dur” deyin. Daha sonra, bu sayı standart yöntemler kullanılarak diğer dağılımlara dönüştürülebilir.

Bu yöntemi sağlam hale getirmek için, modülün çok büyük olmaması gerekir, aksi takdirde küçük sayılara karşı güçlü bir önyargı olacaktır. Bu yöntemin stokastik özelliklerini analiz eden herhangi bir çalışma olup olmadığını görmek isterim.


Saymanın hızlı yapılması önemlidir, bence - sayılan kişi saniyede sadece 1 veya 2 adımda ritmik sayılmamalı. Çünkü, yeterli entropi elde etmek için tüm sayılar arasında önemli sayıda döngü (sezgisel ≥4) olmalıdır.
Aaron Thoma,

Daha iyi rastgelelik için iyileştirme önerisi : Sayma yapan kişi ilk önce 0 ile modulus arasında gizli bir rastgele X₀ tohumu alır; sayma ile birlikte, bu hala minimum düşünme çabasında iyi bir rastgelelik sağlamalıdır (sayma süresine göre yavaş sayıyor olsa bile; yani düşük devir sayısı - sezgisel olarak ≥2 iyi olur; <2 tamam olur).
Aaron Thoma,

4

Bu karmaşık bir sorudur; Yabani otlara fazla uzaklaşmadan biraz açıklamaya çalışacağım.

İlk önce, " gerçek rastgelelik nedir" diye sormamız gerekiyor. Bu tür tartışmalar hızla felsefi sulara dönüşüyor, ama esas şudur: "evren gerçekten rastgele mi"? Başka bir deyişle, eğer zaman ve maddeyi ölçüyorsanız, evrenin bir sonraki durumunu şu anki durumdan hesaplayabilir misiniz? Eğer evet ise, o zaman evren deterministiktir ve gerçek rastgelelik yoktur (“felsefi” hakkında ne demek istediğimi anlayın?)

“Gerçek rastgelelik” tanımlaması zor olduğu için sık sık “yalancı rasgele” yiz. Bu, elbette bir bilgisayarda "rasgele" sayılar oluşturulurken gereklidir.

En basit sözde rasgele sayı üreteci Dilbert'in ünlü "9 .. 9 .. 9 .." algoritması gibi bir şey olurdu. Ancak sezgisel olarak çok iyi görünmüyor (ki şaka). İstatistikçiler, sözde rasgele çıktıların bir dizisinin "iyi" olup olmadığını söylemek için çok sayıda test geliştirdiler. "Chi squared testi" için wikipedia sayfasından başlayarak öğleden sonralarını bu testleri okuyarak geçirebilirsiniz.

"Doğrusal uyumluluk üreteci" gibi basit bir bilgisayar algoritması ki-kare testi için yeterince iyi sayılar üretir (ancak bu algoritmayı yine de bir şeyden "tohumlamanız gerekir").

"İyilik" te bir sonraki adım, "a1, a2, ... dizisi verildiğinde, çok fazla hesaplama yapmadığınız sürece, sıradaki" makul olasılık "olan bir sonraki sayıyı tahmin edemeyeceğiniz anlamına gelen," kriptografik olarak güçlü rastgelelik "tir. Bu sayılara bazen "hesaplamalı sözderandom" denir. Böyle bir sekans elde etmenin yaygın bir yolu, bunun gibi bir "karma zinciri" dir: a1 = SHA512 (a2), a2 = SHA512 (a3), ... SHA512'nin (deneyime dayanarak, matematiksel kanıtı olmadığını) inandığımızdan beri hesaplamalı olarak çevirmesi zor, a2'nin sadece a1 verilmiş olduğunu tahmin etmenin "imkansız" olduğuna inanıyoruz.

Öyleyse şimdi soru ortaya çıkıyor, insanların sorunuzda belirtilen kurallara göre yapabileceği en iyi şey nedir? İnsanlar, rastlantısallık yaratma konusunda çok kötüdür; eskiden madalyonu çeviriyormuş gibi H, T, T, H, H, T, T vb. kafan). Bir süre sonra, web sitesi kliplerinizi zamanın% 50'sinden daha iyi bir şekilde tahmin etmeye başlar (bir Gizli Markov Modeli kullanarak). Sadece bu işte kötüyüz.

Muhtemelen kafanızda yapılabilecek çeşitli karıştırma tekniklerini kullanarak durumu iyileştirmenin yolları vardır. Ve bunu neden isteyebileceğinize dair hayal bile edebileceğim uygulamalar bile var (siyasi mahkum bir mesajı müttefiklere şifrelemek istiyor). Ancak bu yazının yeterince uzun olduğunu düşünüyorum. :)


1
Gerçekten rastgele bir fiziksel sürecin var olup olmadığı tartışmaya açık olsa da (EPR paradoksunu içeren deneyler olumlu bir cevap ortaya koysa da), Kolmogorov karmaşıklığına dayanan rastgele bir dizinin teorik bir tanımı mevcuttur.
biziclop

3

Alet tabanlı RNG'lerin çoğalmasının nedeni, rasgele sayı üretimi için iyi bir kafa içi algoritmanın henüz geliştirilmemesidir .

Neyse ki portatif rasgele sayı üreteçleri - float için paralar, haddeleme için zarlar (çeşitli yüzlerde), çekme için kartlar ve çekme için çubuklar dahil - düşük maliyetle elde etmek nispeten kolaydır. Dahası, aramızdaki teknisyenler için, çoğu mobil platform için mevcut olan bu araçların bazı oldukça iyi simülasyonları var.

Bunlardan herhangi birini et ürünleri alternatifi üzerine yürekten tavsiye ederim.


1
Ve bu fiziksel aygıtlar gerçekten onlar için öngörülemeyen bir yapıya sahipler, bu yüzden bir anlamda en iyi bilgisayar algoritmasından daha rasgele.
Omega Centauri

( @OmegaCentauri: Tabii ki orada ne yaptığını görüyorum!; O) ( Puntanın amaçlandığından emin değilim, ama hoşuma gidiyor. :)) )
Aaron Thoma

3

Yüksek oranda randomize, dakikada büyük miktarda ve insanlar tarafından üretilen? Olmayacak

Karşılaşacağınız temel problemler:

  • İnsanlar hızlı bir şekilde sıkılıyor, bu yüzden desenler hızla gerçekleşiyor
  • İnsan beyninin örüntü tanıma / yaratmaya adanmış birçok yapısı vardır, bu yüzden bunu yenmek zorunda kalacaksınız
  • Gerçekten rastgele sayılar, insanların kaçınmaya çalıştığı tekrarları içerir
  • İnsanlar çok sayıda iyi değil

Bu, birçok kriptografın "kafa içi" teknikleri, rasgele olan dışsal işlemler lehine terk etmesine neden oldu çünkü "kafa içi" sayılara dayanan kalıpları çözmek çok basitti.

Konu dışı ama ilginç

Kafanızda rastgele sayılar üretme mekanizması olmasa da, Solitaire algoritması (Neal Stephenson's Cryptonomicon'da gösterildiği gibi) kriptografik amaçlar için rastgele sayılar kullanmanın ne kadar zor olduğunu göstermektedir. Makul bir şekilde güvenli bir çıktı oluşturmak için yalnızca bir paket sıradan oyun kartı gerektirir, ancak yapılması gereken yöntem oldukça karmaşıktır.


1
Bence bu soruya cevap vermiyor. Cevabınızın 4 puanı sadece insanlar algoritmasız rasgele sayılar bulmaya çalıştılarsa geçerlidir. OP'nin bunun farkında olduğunu ve bunun insanların kafalarında yapabilecekleri ve iyi sonuçlar verebilecekleri bir algoritma istemelerinin nedeni olduğunu düşünüyorum, yani cevabınızda belirtilen sorunlara maruz kalmayın.
FabianB

2

İnsanların bu sorunla ilgili bulabilecekleri her şeyi gerçekten merak ediyorum.

Lütfen masadan uzaklaşın ve Las Vegas'a gidin.

İnsanoğlunda düzinelerce rastgele işlem vardır. Hepsini Las Vegas'ta görebilirsiniz.

Dönen dairelerin var. Yuvarlanan küplerin var. Ve belirteçleri karıştırdın. Hepsi harika çalışıyor.

Küpler belki de en eskisidir. Görünüşe göre bir noktada kullanılan uzun 4 taraflı çubuklar vardı. Koyunların simetrik kübik mafsal kemikleri binyıllar boyunca popülerdi. Bu tür randomizörleri kullandığımızdan beri - muhtemelen - dil geliştirdiğimiz zamandan beri.

http://itunes.apple.com/us/app/motionx-dice/id287509231?mt=8

“Rastgele rakam üretmenin aritmetik yöntemlerini düşünen herkes elbette günah durumunda”

--- John von Neumann


7
Aşağı oylama - Rastgele sayılar üretmek için harici araçlarla ilgilenmiyorum, daha doğrusu gerçekten rastgele sayılar üretmek için anılar veya uyarıcılara dayanan kafa içi algoritmalar.
Magnus Wolffelt

3
kafanda zar alamazsın
jk.

2
@ jk01: Doğru. Kafanda da rastgele yapamazsın.
S.Lott

@ S.Lott - "Söylemek istediğin şey," tipik bir insan, saf yöntem kullanarak ve hiçbir harici alet kullanarak yüksek hızda sürekli olarak rasgele sayılar üretemez "demek.
Inaimathi

1
@Inaimathi. Hayır, çok daha güçlü bir şey söylüyorum. Kafanda rastgele yapamazsın. Beyniniz önyargılarla doludur, bu yüzden bir algoritmaya ihtiyacınız var. Hiçbir sonlu, etkili, deterministik algoritma rastgele değildir. Bunu basitçe yapamazsınız. Yeterince basit bir algoritma sözde rastgele bile değildir, bu nedenle rastgele yaklaşamazsınız. Zarlar küçük, kullanışlı ve uzun, uzun bir kullanım geçmişine sahiptir.
S.Lott

1

Hiçbir şey düşünemiyorum. Aslında, geldiğiniz herhangi bir şeyin, içinde değersiz olacağı kadar önyargılı olmasını beklerdim.

Eğer rastgele sayılara ihtiyacım olursa, genellikle zar atıyorum.


0

Kafanda yapabileceğin bir LCM mi istiyorsun? Bunun zardan daha iyi olduğu fikrinin saçma kaldığını unutmayın.

Bununla birlikte, bu sonlu, kesin ve etkili bir algoritma olabilir.

http://www.vias.org/simulations/simusoft_lincong.html

http://www1.i2r.a-star.edu.sg/~knandakumar/nrg/Tms/Probability/Probgenerator.htm

U_ {k + 1} = (a \ kez U_k + b) mod (m + 1).

A = 5, b = 1 ve m = 7 gibi küçük değerler seçersek, bunun ne yaptığını görmek daha kolaydır. Bunu kafanda yapabiliyor olmalısın.


Acaba bunun rasgele bir versiyonu olup olmadığını ( lineer uyumlu jeneratör (LCG) ), birinin kafasında yapmak gerçekten kolay mı? a = 1 ideal olarak, a = 2 ideal olarak. (Bir sonraki yorumda bu konuda şimdiye kadar düşüncelerim.)
Aaron Thoma

(( Zekice seçilen a = 1, b üssü, b'nin daha büyük m'ler için daha uygun bir alternatif olabileceğini düşündüm, hala iyi sonuç verecekti. Sonra muhtemelen bunun doğru olmadığını farkettim: b :0 veya b≈m için, sayılar arasında sırayla dolaşmak; b≈m / 2'nin cevap olduğunu düşündüm, ama sonra sırayla (sırayla (küçük | b – m / 2 | / m için) dönüşümlü olarak iki konumda olabileceğini fark ettim. b≈m / 3, 3 pozisyon arasında değişen sıralı olabilir, b≈m / 99 için problem artık alternatif formda olmaz, ancak bir modulo çıkarma işleminde döngü yapmak için ~ 99 adım sürer. ))
Aaron Thoma
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.