Algoritmo di generazione di numeri casuali per cervelli umani? [chiuso]


37

Sei a conoscenza o hai escogitato algoritmi "in testa" pratici e di facile apprendimento che consentono agli esseri umani di generare numeri (un po '"veri") casuali? Per "in-head" intendo .. preferibilmente senza strumenti o dispositivi esterni. Inoltre, è desiderabile un alto rendimento (molti numeri casuali al minuto).

Ho chiesto questo su SO ma non ha suscitato molto interesse. Forse questo è più adatto per i programmatori.


7
@ S. Lott Non credo sia affatto assurdo. Poco pratico? Perchè certamente. Assurdo? Certamente no. E anche se lo fosse, l'assurdità può spianare la strada a pensieri nuovi e utili.
biziclop,

21
9 .... 9 .... 9 .... 9 - Non puoi provare che non sia casuale.

13
S.Lott: L'idea di un generatore di numeri pseudo-casuale facile da calcolare non è affatto assurda. Penso che l'OP voglia un modo per evitare il pregiudizio umano qui ...
Jens,

8
Trovo divertente (e allo stesso tempo leggermente deprimente) quante persone sembrano apprezzare un argomento di ignoranza. "Non riesco a immaginarlo, quindi non può esistere", o risposte a cui manca completamente il punto.
biziclop,

4
Questa domanda sembra fuori tema perché riguarda l'abilità cognitiva di un individuo e non la programmazione.

Risposte:


36

Ecco un algoritmo di George Marsaglia :

Scegli un numero di 2 cifre, diciamo 23, il tuo "seme".

Forma un nuovo numero di 2 cifre: la cifra dei 10 più 6 volte la cifra delle unità.

La sequenza di esempio è 23 -> 20 -> 02 -> 12 -> 13 -> 19 -> 55 -> 35 -> ...

e il suo periodo è l'ordine del moltiplicatore, 6, nel gruppo di residui relativamente primi del modulo, 10. (59 in questo caso).

Le "cifre casuali" sono le cifre delle unità dei numeri a 2 cifre, ovvero 3,0,2,2,3,9,5, ... la sequenza mod 10. L'aritmetica è abbastanza semplice da eseguire nel tuo testa.


Sembra davvero buono.
biziclop,

4
Questo potrebbe non essere un problema per le esigenze di una persona in particolare, ma ti dà solo 90 flussi diversi.
compman

5
79, 79, 79, 79, 79, 79, 79, 79, 79, 79, oh no! Suppongo che dovresti rimanere <= 60, il che funziona bene perché puoi usare l'orologio per un seme se non ne hai uno.
eds

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

1
Forse @eds significava 59. Tutti i numeri da 1 a 58 sembrano essere un gioco leale.
Erhannis,

26

Dai un'occhiata a questo articolo su Geomanzia . In particolare la sezione sulla generazione di grafici geomantici . Implica una tecnica di generazione di numeri pseudo-casuali utilizzando cifre binarie e alcuni semplici calcoli ricorsivi. Sembra che potresti farlo abbastanza facilmente nella tua testa (anche se un pezzo di carta sarebbe d'aiuto).

Disclaimer: non l'ho provato da solo; quando ho bisogno di un numero sufficientemente casuale, ottengo un po 'di output /dev/random, uso randin qualsiasi lingua che ho a portata di mano, o eseguo il mio fidato d20.

Se sei un prodigio in matematica, il metodo Middle-square è un metodo abbastanza computazionalmente leggero, anche se notevolmente inaffidabile.


3
+1 Penso che questa sia la prima risposta seria a questa domanda. Un po 'triste.
Jens,

@Magnus Wolffelt - Mi sono ricordato di essere stato menzionato in un discorso TED di Ron Eglash sul significato culturale della geometria frattale in Africa; "Bamana Sand Divination". È abbastanza interessante, anche se non ho ancora idea di cosa useresti questa tecnica per ora che non abbiamo più bisogno di indovini. ted.com/talks/ron_eglash_on_african_fractals.html
Inaimathi

1
Per quanto posso vedere, quel metodo geomantico ti permette semplicemente di "migliorare" (suppongo che "debias" sarebbe un termine migliore) una fonte di casualità. Non essere preso in giro, ma non proprio quello che l'OP stava cercando. Il che non vuol dire che non è carino ....
Norman Grey,

@Norman Grey - I cervelli umani possono inventare numeri arbitrari di parte per impostazione predefinita.
Inaimathi,

@Inaimathi Precisamente: ecco perché il debiasing dei numeri sarebbe importante e perché il metodo che hai indicato è utile. O ti sto fraintendendo.
Norman Gray,

10

Penso che un presupposto ragionevole sia che devi fare affidamento sulla grande quantità di informazioni verbali che memorizzi nel tuo cervello. La fonte può essere qualsiasi cosa, testi di canzoni, poesie, schizzi di Monty Python, ma deve essere qualcosa che conosci a memoria.

Quindi devi selezionare una parte abbastanza casuale di essa eliminando il più possibile i pregiudizi inconsci. Un modo per fare questo, ad esempio, sarebbe selezionare una canzone, scegliere un numero kcompreso tra 10 e 20 e quindi trovare la klettera th nei suoi testi.

Ovviamente questo non ti darà una distribuzione uniforme in sé, poiché la frequenza delle lettere è diversa, ma è comunque una lettera casuale, o almeno così vicina come credo sia possibile senza una fonte esterna.

Aggiornamento: A proposito, quando viene chiesto alle persone di scrivere una sequenza casuale di lanci di monete, l'errore più comune è di gran lunga quello di rendere la sequenza "troppo casuale": corse di risultati identici saranno troppo brevi, il che richiede una lunghezza semplice l'analisi rivelerà. Questo metodo ha principalmente lo scopo di evitare questa trappola. Ovviamente altre anomalie potrebbero derivare dall'ombra di questa distorsione da corsa, ma per trovarle avresti bisogno di esperimenti adeguati. Un po 'ironicamente, un algoritmo per generare numeri casuali pensando solo non può essere trovato pensando solo.


Anche allora mi aspetterei che tu sia distorto in molti modi sottili. (IE tende a scegliere lo stesso gruppo di canzoni)
Zachary K,

@Zachary K Senza dubbio, ma dovresti anche scegliere un numero, che lo diffonde un po '. Sebbene il pregiudizio non possa mai essere eliminato, questo metodo quasi sicuramente ti impedisce di sapere quale lettera sceglierai (anche se con il tempo sei tenuto a memorizzarne alcuni).
biziclop,

Eini mini miny moe, come facevamo da bambini.
Zaccaria K,

2
msgstr "scegli un numero k tra 10 e 20". 17. Il numero meno casuale.
S.Lott

@ S.Lott Non importa quanto sia casuale questo numero. L'unica ragione per cui ti serve è che tendi a ricordare più facilmente le prime lettere delle cose.
biziclop,

9

Prova il tuo orologio.

Lo faccio se ho bisogno di un numero casuale che sia un fattore di 60 (secondi). Prendi il modulo appropriato in qualsiasi momento. 16:17:23, simulando un tiro di dado, diventa 5.


E per un gran numero al minuto?
Gary Rowe,

Non sono sicuro di seguire. Stai dicendo di creare il pool di numeri 3600 includendo i minuti? Immagino, ma maggiore è il numero, meno casuale sarebbe? Come se non fosse possibile prelevare rapidamente i campioni con la stessa facilità.
Mark Canlas,

1
@Gary Rowe Temo che questo criterio debba essere scartato, semplicemente perché, indipendentemente dal metodo utilizzato, il cervello umano è semplicemente troppo lento.
biziclop,

Mi dispiace, mi stavo solo chiedendo come funziona il tuo approccio se hai bisogno di più di 60 numeri al minuto. Con il senno di poi, chiedere a un cervello umano di produrre quel numero elevato di numeri al minuto lo farà comunque al massimo, quindi non preoccuparti.
Gary Rowe,

@biziclop Nessun problema. Sembra che ho avuto una collisione di commenti mentre consideravo la situazione con l'approccio di @ Mark.
Gary Rowe,

5

Ottima domanda Temo che una buona risposta possa rivelarsi molto difficile.

Ma come inizio, è abbastanza facile generare una casualità "vera" quando sono coinvolte due persone: lascia semplicemente che una delle persone contenga in silenzio un numero nel suo modulo di testa, e l'altra dice "ferma" dopo un intervallo arbitrario. Successivamente, questo numero può essere trasformato in altre distribuzioni usando metodi standard.

Per rendere solido questo metodo, il modulo non deve essere troppo grande, altrimenti ci sarà una forte propensione per i piccoli numeri. Sarei davvero interessato a vedere se esiste qualche lavoro che analizzi le proprietà stocastiche di questo metodo.


È importante che il conteggio avvenga rapidamente, credo: la persona che conta dovrebbe fare attenzione a non contare ritmicamente, a circa 1 o 2 passi al secondo. Perché dovrebbe esserci un numero significativo di cicli (intuitivamente ≥4) attraverso tutti i numeri per raggiungere abbastanza entropia.
Aaron Thoma,

Suggerimento di miglioramento per una migliore casualità : la persona che conta prende un seme casuale segreto X₀ tra 0 e il modulo per primo; in combinazione con il conteggio, ciò dovrebbe fornire una casualità decente con uno sforzo di pensiero ancora minimo (anche quando si conta lentamente, rispetto alla durata del conteggio; cioè un basso numero di cicli - intuitivamente ≥2 andrebbe bene; <2 sarebbe okay-ish).
Aaron Thoma,

4

Questa è una domanda complessa; Proverò a spiegare un po 'senza vagare troppo lontano tra le erbacce.

Innanzitutto, dobbiamo chiederci "cos'è la vera casualità"? Tali discussioni degenerano rapidamente in acque filosofiche, ma l'essenza è questa: "l'universo è veramente casuale"? In altre parole, se quantizzi tempo e materia, puoi calcolare il prossimo stato dell'universo da quello attuale? Se sì, allora l'universo è deterministico e non c'è vera casualità (vedi cosa intendo per "filosofico"?)

Poiché la "casualità reale" è difficile da definire, spesso ci accontentiamo di "pseudorandomness". Questo è generalmente richiesto quando si generano numeri "casuali" su un computer, ovviamente.

Il più semplice generatore di numeri pseudocasuali sarebbe simile al famoso algoritmo "9 .. 9 .. 9 .." di Dilbert. Ma intuitivamente non sembra molto buono (che ovviamente è uno scherzo). Gli statistici hanno sviluppato tutta una serie di test per stabilire se una sequenza di risultati presumibilmente casuali è "buona". Inizia con la pagina di Wikipedia per "chi squared test" e potresti passare un pomeriggio leggendo questi test.

Un semplice algoritmo informatico come un "generatore di congruenza lineare" produce numeri abbastanza buoni per un test chi-quadrato (è comunque necessario "seminare" questo algoritmo da qualcosa).

Il prossimo passo in "bontà" è "casualità crittograficamente forte", il che significa che data una sequenza a1, a2, ... non è possibile prevedere il numero successivo nella sequenza con "ragionevole probabilità" a meno che non si utilizzi molto calcolo. Questi numeri sono talvolta chiamati "computazionalmente pseudocasuali". Un modo comune per ottenere una tale sequenza è tramite una "catena hash" come questa: a1 = SHA512 (a2), a2 = SHA512 (a3), ... Dal momento che crediamo (basato sull'esperienza, non sulla prova matematica) che SHA512 sia computazionalmente difficile da invertire, crediamo che a2 sia "impossibile" da prevedere dato solo a1.

Quindi ora sorge la domanda: qual è la cosa migliore che gli umani possano fare secondo le regole stabilite nella tua domanda? Gli umani sono notoriamente cattivi nel generare casualità; c'era un sito web che ti avrebbe tentato di generare lanci di monete digitando "casualmente" H, T, T, H, H, T, T, ecc. come se stessi lanciando una moneta (ma lo fai in la tua testa). Dopo un po ', il sito web inizierà a prevedere i tuoi lanci meglio del 50% delle volte (usando un modello nascosto di Markov). Siamo proprio cattivi in ​​questo.

Ci sono modi per migliorare la situazione usando varie tecniche di miscelazione che sono probabilmente fattibili nella tua testa. E ci sono anche applicazioni che potrei immaginare perché potresti volerlo (un prigioniero politico vuole criptare un messaggio agli alleati esterni). Ma penso che questo post sia abbastanza lungo. :)


1
Sebbene l'esistenza di un processo fisico veramente casuale sia aperta al dibattito (sebbene gli esperimenti che coinvolgono il paradosso dell'EPR suggeriscano una risposta positiva), esiste una definizione teorica di una sequenza casuale, basata sulla complessità di Kolmogorov.
biziclop,

3

La vera ragione della proliferazione di RNG basati su strumenti è che non è ancora stato sviluppato un buon algoritmo interno per la generazione casuale di numeri .

Fortunatamente generatori di numeri casuali portatili - tra cui monete per il flop, dadi (con vari numeri di sfaccettature) per rotolare, carte per la raccolta e cannucce per il disegno - sono relativamente facili da ottenere a basso costo. Inoltre, per i tecnofili tra noi, ci sono alcune simulazioni piuttosto buone di questi strumenti disponibili per la maggior parte delle piattaforme mobili.

Consiglierei vivamente uno di questi rispetto a qualsiasi alternativa di prodotti di carne.


1
E questi dispositivi fisici hanno davvero una natura imprevedibile, quindi in un certo senso sono più casuali dei migliori algoitmi informatici.
Omega Centauri,

( @OmegaCentauri: Naturalmente vedere quello che hai fatto lì; o!) (Non sono sicuro il gioco di parole è stato inteso, ma mi piace :).) )
Aaron Thoma

3

Altamente randomizzato, grande quantità al minuto e generato dall'uomo? Non succederà

I problemi principali con cui ti imbatterai sono

  • Le persone si annoiano rapidamente, quindi i modelli si verificheranno rapidamente
  • Il cervello umano ha molte strutture dedicate al riconoscimento / creazione di schemi, quindi dovrai sconfiggerlo
  • Numeri veramente casuali contengono ripetizioni che gli umani cercano di evitare
  • Gli umani non sono bravi con grandi numeri

Ciò ha portato molti crittografi ad abbandonare tecniche "in-head" a favore di processi esterni casuali perché era troppo semplice elaborare schemi basati su numeri "in-head".

Fuori tema ma interessante

Sebbene non sia un meccanismo per generare numeri casuali nella tua testa, l' algoritmo Solitaire (come rappresentato nel Cryptonomicon di Neal Stephenson ) dimostra quanto sia difficile usare numeri casuali per scopi crittografici. Richiede solo un mazzo di carte da gioco ordinarie per creare un risultato ragionevolmente sicuro, ma il metodo da fare è piuttosto complesso.


1
Penso che questo non risponda alla domanda. I 4 punti della tua risposta si applicano solo se le persone hanno cercato di trovare numeri casuali senza un algoritmo. Penso che l'OP sia consapevole di questo e questo è il motivo per cui chiede un algoritmo che le persone possano fare nella loro testa e dare buoni risultati, cioè non soffrire dei problemi menzionati nella tua risposta.
FabianB,

2

Sono sinceramente curioso di tutto ciò che le persone potrebbero aver escogitato su questo problema.

Per favore, allontanati dalla scrivania e vai a Las Vegas.

L'umanità ha dozzine di procedure randomizzate. Puoi vederli tutti a Las Vegas.

Hai dei cerchi rotanti. Hai dei cubi cadenti. E hai mischiato i token. Funzionano tutti meravigliosamente bene.

I cubi sono forse i più vecchi. Apparentemente c'erano dei bastoncini a 4 lati allungati usati ad un certo punto. Le ossa di ferro cubiche simmetriche di pecora erano popolari da millenni. Usiamo questo tipo di randomizzatori da quando - probabilmente - nello stesso periodo in cui abbiamo sviluppato il linguaggio.

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

"Chiunque consideri metodi aritmetici per produrre cifre casuali è, ovviamente, in uno stato di peccato"

--- John von Neumann


7
Downvoted - Non mi interessano gli strumenti esterni per generare numeri casuali, ma piuttosto algoritmi interni che possono fare affidamento su memorie o stimoli per generare numeri veramente casuali.
Magnus Wolffelt,

3
non puoi tirare i dadi in testa
jk.

2
@ jk01: corretto. Neanche tu puoi fare casualmente in testa.
S.Lott

@ S.Lott - Penso che ciò che intendi dire sia "Un umano tipico non può generare numeri casuali nella sua testa ad alta velocità usando il metodo ingenuo e senza strumenti esterni".
Inaimathi,

1
@Inaimathi. No, sto dicendo qualcosa di molto più forte. Non puoi fare casualmente in testa. Il tuo cervello è pieno di pregiudizi, quindi hai bisogno di un algoritmo. Nessun algoritmo finito, efficace, deterministico è casuale. Semplicemente non puoi farlo. Nessun algoritmo abbastanza semplice è nemmeno pseudo-casuale, quindi non è possibile approssimare il caso. I dadi sono piccoli, maneggevoli e hanno una lunga e lunga storia di utilizzo.
S.Lott

1

Non riesco a pensare a nessuno. In effetti, mi aspetterei che qualsiasi cosa ti venisse in mente avrebbe avuto così tanti pregiudizi da rendere inutile.

Se ho bisogno di numeri casuali, generalmente lancio i dadi.


0

Stai chiedendo un LCM che puoi fare nella tua testa? Nota che l'idea che sia meglio dei dadi rimane assurda.

Tuttavia, questo è casuale come qualsiasi algoritmo finito, definito ed efficace può essere.

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 \ times U_k + b) mod (m + 1).

È più facile vedere cosa sta facendo se selezioniamo piccoli valori a = 5, b = 1 e m = 7. Dovresti essere in grado di farlo nella tua testa.


Mi chiedo se esiste una versione abbastanza casuale di questo ( generatore di congruenza lineare (LCG) ), che è davvero facile da fare nella testa? a = 1 idealmente, a = 2 secondi idealmente. (I miei pensieri finora su questo nel prossimo commento.)
Aaron Thoma,

(( Pensavo che a = 1, b primo, b sapientemente scelto, potesse essere un'alternativa più fattibile per m più grandi, che avrebbe comunque funzionato bene. Poi ho notato che probabilmente non è vero: per b≈0 o b≈m, lo farà attraversare piuttosto in sequenza i numeri; quindi ho pensato che la risposta fosse b 2m / 2; ma poi ho notato che potrebbe anche essere sequenziale (per piccoli | b – m / 2 | / m), solo alternativamente in due posizioni. b≈m / 3, potrebbe essere sequenziale, alternando tra 3 posizioni; per b≈m / 99 il problema non sarebbe più in forma alternata, ma sarebbero necessari circa 99 passaggi per scorrere una sottrazione di un modulo. ))
Aaron Thoma,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.