Un generatore di numeri casuali può mai produrre output diversi con semi identici?


10

Il titolo lo riassume. Sono interessato a sapere se esiste un algoritmo in grado di produrre output variabili con input identici senza fare affidamento su altre fonti per casualità come DateTime.Now o un numero generato da un sensore di luce ecc. Inoltre, l'algoritmo non può essere eseguito in sequenza, solo due esecuzioni distinte, non correlate che producono output diversi.


Quello di cui stai parlando è un generatore di numeri casuali pseud, per essere precisi.
Marcel,

Molte lingue offrono la possibilità di creare un'istanza di un generatore di numeri casuali senza dover specificare il seme in modo che anche il seme sia "casuale". C'è un motivo per cui vengono usati i semi.
Neil,

1
@Neil: in quei casi, c'è ancora un seme, è solo implicito, di solito l'ora del sistema.
Michael Borgwardt,

@MichaelBorgwardt, ho semplicemente detto che anche il seme sarebbe stato casuale. Naturalmente nulla è veramente casuale, ma di solito il tempo di sistema fornisce un seme decente, a patto che non si crei un'istanza di un generatore di numeri casuali senza passare un seme, nel qual caso è possibile ottenere lo stesso seme "casuale" seme due volte.
Neil,

C'è un'interessante area di ricerca sull'hardware inesatto, che ha un'imprecisione statisticamente ben definita. Il potenziale vantaggio è un consumo di energia inferiore. Il solo calcolo 2.0 + 2.0su un tale sistema non darebbe risultati identici. Non ha bisogno di un'altra fonte di casualità.
Salterio

Risposte:


15

Sono interessato a sapere se esiste un algoritmo in grado di produrre output variabili con input identici senza fare affidamento su altre fonti per casualità come DateTime.Now o un numero generato da un sensore di luce ecc.

No, questo è fondamentalmente impossibile, perché la definizione stessa di un algoritmo è che è ben definito e deterministico, cioè dato che lo stesso input produrrà sempre lo stesso output. Esistono algoritmi randomizzati, ma richiedono casualità come input.

Inoltre, il determinismo è l' obiettivo di progettazione più importante dell'hardware del computer. Una CPU che non produce lo stesso output dato lo stesso input sarebbe assolutamente inutile per la maggior parte degli scopi.


14

No, un algoritmo di generazione di numeri pseudo-casuali produrrà sempre lo stesso output dato lo stesso seme (quindi pseudo casuale).

Trovo interessante che tu abbia usato il termine "algoritmo" anziché "programma". Ciò esclude una certa classe di risposte yes (errori soft nella RAM, interluci di thread diversi in un RNG multi-thread, ecc.). Se si dà per scontato che ogni esecuzione dell'algoritmo prenda lo stesso input su ogni iterazione è ben specificato senza casualità, genererà lo stesso output su ogni esecuzione.

Detto questo, anche le cose di base come la temperatura della CPU sono abbastanza imprevedibili da agire come una fonte di entropia se vengono adeguatamente normalizzate. Quindi, non pensare che questo implichi che un generatore di numeri casuali "crittograficamente sicuro" può essere previsto se sai a che ora è stato eseguito; molti di loro fanno uso di feed entropici generati dal sistema.


L'algoritmo era la parola giusta :) Sto specificamente cercando di eliminare fonti esterne di entropia, difetti di memoria, ordine dei thread, input imprevedibili come una fonte di luce, ecc. Penso che la mia domanda derivi dalla mia mancanza di comprensione degli algoritmi casuali e forse Avrei potuto rendere la domanda più generica. Mi chiedo davvero se è possibile creare qualsiasi funzione che restituisca risultati diversi con input identici (comprese tutte le fonti di entropia). Sembra che la risposta sia no
ConditionRacer

7

Sapevi che le persone lavorano molto duramente per garantire che, dato lo stesso seme, venga prodotta ogni volta la stessa sequenza di numeri casuali? Questa è una proprietà desiderabile per cose come la simulazione Monte Carlo, in quanto significa che i risultati sono completamente riproducibili. Se non specifichi il seme, verrà utilizzato qualcosa come il tempo, ma si desidera davvero quell'esatta riproducibilità.

Gli unici RNG in cui questo è veramente indesiderato sono quelli usati per la crittografia e quelli in genere ottengono questo risultato utilizzando la fonte di numeri casuali del sistema operativo (che non è riavvolgibile in circostanze normali e che può usare hardware sofisticato) per fornire il proprio seme.


Sì, capisco quello che stai dicendo. Non sto cercando di implementare nulla di nuovo, questa era solo una curiosità a tarda notte.
Condizioni del

1

Suppongo che se hai implementato l'algoritmo su piattaforme hardware diverse e ha usato tecniche come prendere i N bit centrali da un numero intero, puoi concepibilmente ottenere risposte diverse se la codifica dei numeri interi fosse diversa (big / little / mid-endian). Potresti anche riscontrare problemi in esecuzione su macchine con FPU rispetto a quelli che non lo fanno se stai manipolando numeri in virgola mobile. Probabilmente non è un problema sui computer di classe desktop, ma potrebbe essere un problema sui telefoni.

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.