Che cos'è la casualità


23

Sono uno studente di informatica e sono attualmente iscritto al corso di simulazione e modellizzazione del sistema. Implica la gestione dei sistemi quotidiani intorno a noi e la loro simulazione in diversi scenari generando numeri casuali in diverse curve distributive, come IID, Gaussian ecc. Ho lavorato al progetto boids e una domanda mi ha fatto capire che cos'è esattamente "random"? Voglio dire, ad esempio, ogni numero casuale che generiamo, anche nei nostri linguaggi di programmazione come tramite il Math.random()metodo in Java, è essenzialmente generato seguendo un "algoritmo".

Come sappiamo davvero che una sequenza di numeri che produciamo è di fatto casuale e ci aiuterebbe a simulare un certo modello nel modo più accurato possibile?



Risposte:


18

La risposta breve è che nessuno sa cosa sia la casualità reale o se esiste una cosa del genere. Se si desidera quantificare o misurare la casualità di un oggetto discreto, in genere si passa alla complessità di Kolmogorov . Prima della complessità di Kolmogorov, non avevamo modo di quantificare la casualità di dire una sequenza di numeri senza considerare il processo che l'ha generata.

Ecco un esempio intuitivo che stava davvero infastidendo le persone nel corso della giornata. Considera una sequenza di lanci di monete. Il risultato di un lancio è o testa ( ) o croce ( T ). Supponiamo di fare due esperimenti, in cui lanciamo una moneta 10 volte. Il primo esperimento E 1 ci dà H , H , H , H , H , H , H , H , H , H . Il secondo esperimento E 2 ci dà T , T , H , T , H ,HTE1H,H,H,H,H,H,H,H,H,HE2 . Dopo aver visto il risultato, potresti essere tentato di affermare che c'era qualcosa di sbagliato nella moneta in E 1 , o almeno per qualche strana ragione quello che hai ottenuto non è casuale. Ma se si assume sia H e T sono come probabile (la moneta è giusto), la probabilità di ottenere uno E 1 o E 2 è pari a ( 1 / 2 ) 10 . In effetti, ottenereunasequenza specifica è probabile come qualsiasi! Tuttavia, E 2 si senteT,T,H,T,H,T,T,H,T,HE1HTE1E2(1/2)10E2 casuale, e no.E1

In generale, dal momento che la complessità di Kolmogorov non è calcolabile, non si può calcolare quanto sia casuale dire una sequenza di numeri, indipendentemente dal tipo di processo "totalmente casuale" dichiarato.


Per infinite sequenze abbiamo molti più strumenti per definire la casualità, come la normalità.
Denis,

1
@dkuper Si noti che la sequenza infinita i cui segmenti iniziali sono tutti casuali secondo la definizione della complessità di Kolmogorov sarà normale, ma essere normali non è sufficiente per essere ciò che potrebbe essere considerato veramente casuale. Ad esempio, ci sono numeri normali tutti i cui segmenti iniziali hanno più 1 di 0.
Quinn Culver,

@Quinn Culver Sì, sono d'accordo, la normalità era solo un esempio di uno strumento aggiuntivo che abbiamo (tra gli altri) per infinite sequenze. La complessità di Kolmogorov e altre sono ancora utili.
Denis

8

Nel caso di Java (o linguaggi simili), conosciamo l'algoritmo utilizzato per creare i numeri casuali. Se inizia con un singolo seme, i numeri non sono affatto casuali, cioè se conosciamo in una sequenza a 0 , ... , a n , conosciamo una i + 1 , o dichiarata come probabilità condizionale: k , l , i : P ( a i + 1 = k a i = l ) { 0 ,un'ioun'0,...,un'nun'io+1

K,l,io:P(un'io+1=K|un'io=l){0,1}

Tuttavia, tali serie possono soddisfare le proprietà (vedi ad esempio WP: autocorrelazione ) che soddisfano i numeri casuali e queste proprietà spesso sono sufficienti per svolgere attività, dove vorremmo usare numeri casuali "reali" (ad esempio generati da alcuni processi fisici), ma possono " non sforzarli.


3

È impossibile sapere con certezza se una determinata sequenza è casuale o no. Tuttavia, è possibile esaminare le caratteristiche (o i parametri) di una sequenza e calcolare la probabilità di tale sequenza data la distribuzione degli interessi.

Se puoi generare una sequenza infinitamente lunga usando il tuo generatore casuale, dovrebbe avere gli stessi parametri della distribuzione casuale. Ad esempio, se si utilizza la distribuzione gaussiana standard , la sequenza dovrebbe avvicinarsi alla media di 0 e alla deviazione standard di 1 . Quindi, un modo preliminare per controllare il tuo generatore è generare una sequenza molto lunga e verificare che si stia avvicinando alla distribuzione casuale desiderata.(μ=0,σ=1)1

È possibile aggiungere ulteriori momenti della distribuzione (come l'asimmetria) di interesse per un'ulteriore convalida. Per i numeri IID, puoi anche provare ad addestrare un algoritmo di apprendimento automatico per prevedere gli elementi imminenti della sequenza e quindi verificare l'ipotesi nulla che la cronologia migliori le prestazioni. Nessuno di questi metodi, tuttavia, può dimostrare che una sequenza è veramente casuale e, nella migliore delle ipotesi, è in grado di riconoscere quando le sequenze NON sono casuali (per un certo grado di certezza).


3

La moderna teoria della risposta informatica è "una fonte casuale è una fonte che sembra casuale alla tua classe di algoritmi preferita". Questa è una prospettiva utilitaristica: se una fonte di casualità sembra vera casualità per tutti gli algoritmi a cui tieni, allora nient'altro conta. Puoi analizzare i tuoi algoritmi come se fossero lanciati lanci di monete davvero casuali e la tua analisi fornirà le risposte corrette.

UNUN

  • tutte le macchine di Turing che si fermano sempre
  • tutte le famiglie di circuiti di dimensioni polinomiali
  • tutte le macchine di Turing a tempo polinomiale
  • tutte le macchine di Turing dello spazio di log

UN(Xn)Xn{0,1}nεUNUNUN

|Pr[UN(Xn)=1]-Pr[UN(Un)=1]|ε,
Un{0,1}n

Questa idea è alla base di ogni moderna nozione formale di pseudo-casualità.


2

Ecco altri due centesimi.

Un modo di pensare agli algoritmi randomizzati è quello di immaginare una scatola che prende un input, fa cose misteriose a quell'input e produce un output ("imprevedibile").

Ma invece, potrebbe essere utile pensarli come algoritmi deterministici che accettano due input: l'input "vero" e alcuni input "casuali" che otteniamo da funzioni come Math.Random().

[0,1]nlogn

[0,1]nlogn

Come menzionano Jonathan e Frafl, ci sono modi per verificare se una fonte casuale si sta comportando "in modo casuale". Ma tutto ciò che faranno è influenzare ciò in cui credi sulle informazioni future che provengono da questa fonte casuale. Se ritieni che ogni bit abbia la stessa probabilità di essere zero o uno, indipendentemente dai bit precedenti, quindi al meglio delle tue conoscenze e convinzioni, quella fonte è uniformemente e indipendentemente casuale e quindi, al meglio delle tue conoscenze e credenze, funzionerà velocemente o sarà corretto o così via. Questa è la mia opinione filosofica, comunque.


-2

Non possiamo generare numeri veramente casuali. Esistono diversi metodi per la generazione di numeri pseudo-casuali utilizzando un'equazione specificata e un valore di seme particolare. Quindi la sequenza casuale di numeri dipende dal valore del seme. Una volta che conosciamo il valore del seme, possiamo prevedere quale sarà la sequenza. Oltre a questo ci sono altri metodi per generare numeri casuali. Le persone ora stanno usando alcuni metodi per generare veri numeri casuali come usare il tempo di movimento della testina del disco e altri metodi fisici che possono essere incorporati in un computer Fare riferimento a: http://en.wikipedia.org/wiki/Random_number_generation#Generation_methods



-3

con il metodo dato come hai detto
Math.random () in Java
Randomize; Random (n); a Delfi

puoi implementare la tua struttura e la tua logica per generare numeri casuali,
dove tale "algoritmo" può eseguire secondo le tue specifiche specifiche per risultati casuali migliori.
e costruire su quella la logica.

Grazie.


2
Come risponde alla domanda "come si fa a sapere che una sequenza è casuale"?
Juho,

come ho già detto. Solo ... dove "random" può essere visto come un cheat, ma non influisce sul suo effetto random. quindi rendilo orgoglioso e costruisci la tua logica. Semplice.
Soprannome del

-4

altre risposte sono buone, ecco alcuni altri punti di vista su questa domanda molto importante / involontariamente profonda. gli informatici studiano la casualità da decenni e probabilmente continueranno a studiarla. ha molte connessioni profonde e soprattutto domande aperte rimanenti in tutto il campo. ecco alcuni suggerimenti.

  • la "casualità reale / reale" si verifica con processi fisici di basso livello e "rumore" come in diodi zener, meccanica quantistica ecc. che possono essere sfruttati negli RNG basati su hardware

  • altri numeri generati nel regno del computer sono ciò che è noto come "pseudocasuale" che viene simulato e non può mai eguagliare la "casualità reale". questi sono i cosiddetti PRNG

  • esiste un importante senso di "durezza crittografica di generatori di numeri casuali" che in un certo senso misura la loro "qualità" o "sicurezza", ad esempio PRNG crittograficamente sicuro . fondamentalmente un generatore "debole" non ha la stessa complessità computazionale di un generatore "duro" e uno "debole" è più facile da rompere.

  • un altro senso in qualche modo correlato che emerge è "durezza delle prove". immagina una prova per dimostrare che un RNG è tempo lineareO(n). quella prova sembrerebbe più semplice di quella richiesta per dimostrare che è quadraticaO(n2)e così via. questo concetto è ancora in fase di formalizzazione / ricerca, ma in realtà incide su questioni profonde come P=?NP in un famoso documento chiamato Natural Proofs . approssimativamente, gli autori mostrano una PLa prova NP deve avere una certa "complessità", altrimenti la stessa tecnica di analisi potrebbe essere utilizzata per rompere i PRNG e inoltre, in qualche modo sorprendentemente, la maggior parte o forse tutte le separazioni / tecniche della classe di complessità conosciute a quella data (o forse anche in seguito, fino ad oggi ) non avere una complessità sufficiente.

  • un importante argomento di ricerca nel TCS sono gli algoritmi randomizzati e derandomizzati . l'idea è, approssimativamente, di studiare quanto l'algoritmo viene modificato sostituendo la "casualità reale" con un PRNG e ci sono vari teoremi profondi sull'argomento. ecco una domanda cstheory.se di alto livello che dà un po 'di sapore alla ricerca in questo settore: algoritmi randomizzati efficienti e semplici in cui il determinismo è difficile

  • un altro argomento chiave correlato nel TCS è l' entropia dell'informazione - originariamente introdotta in fisica molto tempo fa - che studia un concetto strettamente correlato di "disordine delle informazioni" e come alcuni altri concetti importanti in (T) CS sembra essere una delle idee chiave che tagliano al confine tra analisi applicata e teoria, anche alcune delle formule sono le stesse .

  • attestando ancora lo stato della ricerca attiva, ci sono altre domande di alto livello su cstheory.se che si riferiscono a questa domanda. ecco uno vicino, quasi lo stesso: è un generatore di numeri veramente casuale Turing calcolabile


E non solo gli informatici sono ovviamente interessati alla "casualità". È probabilmente una domanda senza età, considerata anche dal punto di vista religioso e filosofico.
Juho,

concordato, anche in fisica è un concetto chiave dell'invenzione del QM e del dibattito di Bohr-Einstein , Bells , e motiva ancora "teorie variabili nascoste" di nuovo un'area attiva di ricerca. così come dici tu, forse nessuno sa cosa sia, ma molti stanno ancora lavorando per trovare una risposta più definitiva mentre parliamo.
vzn

più sulla rilevanza della casualità rispetto all'angolo P vs NP, si presenta nel "punto di transizione" della soddisfacibilità e della cricca, ad esempio come in questo articolo La complessità monotona di k-Clique su grafici casuali di Rossman
vzn

ri rompendo generatori di numeri casuali vedi attacco RNG , wikipedia
vzn

una panoramica sulla casualità in CS di Wigderson RANDOMNESS E PSEUDORANDOMNESS
vzn
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.