Come creare un generatore casuale
Su Febbraio 10, 2021 da adminCome potrebbe essere implementato un generatore casuale?
Non sto parlando dellinvocazione di una lingua mathRandom () , ma limplementazione delle routine che portano a generare numeri totalmente casuali.
Commenti
- I ‘ oserei dire che la vera casualità non è attualmente possibile.
- @Dynamic Penso la stessa cosa, tuttavia ho sempre ho richiamato la funzione casuale quando necessario, ma non ho ‘ idea di come dovrebbe essere implementato un metodo casuale.
- ” totalmente casuale ” è una tana di coniglio molto profonda.
- @Dynamic: in realtà è banale ottenere una sequenza indistinguibile da dati veramente casuali, purché tu guardare al mondo esterno con il supporto hardware. La fisica atomica e subatomica, (eventi di tipo decadimento atomico, fotoni che colpiscono sensori) è (per f lattuale teoria della scienza) veramente casuale e facile da misurare. La termodinamica su larga scala è così caotica che possiamo considerarla casuale quando ispezioniamo il sistema macro sulla micro scala, ecc. Il rumore del sensore di una fotocamera digitale è un buon esempio …..
Risposta
La chiave per un numero veramente casuale è unorigine dati casuale. A volte si tratta di informazioni come ritardi negli eventi della tastiera o negli eventi di rete. Dove si desiderano dati casuali di alta qualità, possono essere decadimento radioattivo . SGI ha implementato lavarand che ha tratto il seme per un generatore di numeri casuali da unimmagine digitalizzata di una lampada lava. Questo era sufficiente per essere considerato un generatore di numeri casuali.
Al di fuori di dati veramente casuali, si può lavorare con un sistema deterministico ma caotico. Ad esempio, il mersenne twister . In queste situazioni, si semina il generatore con un numero e quindi lo si esegue in avanti per ottenere numeri pseudo-casuali. Questi sono sufficienti per i giochi e simili in cui non è critico se qualcuno può determinare il seme (e il numero successivo nella sequenza).
Considera la lettura di patent 5.732.138 e http://www.lavarnd.org/ per i dettagli di implementazione su come creare un numero.
Commenti
- +1 Considero diverse fonti di dati come misurazioni meteorologiche per il tuo seme. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com la sfida con le misurazioni meteorologiche è che non sono completamente casuali. Cè un intero campo sulla previsione del tempo. La temperatura tende a salire allora nel corso di una giornata. Linverno è più freddo dellestate. Il sistema hotbits utilizza la casualità di temporizzare due eventi di decadimento che sono imprevedibili (misura il tempo dallevento 1 allevento 2 e il tempo dallevento 3 allevento 4 – se 1 : 2 == 3: 4, elimina i dati. Se 1: 2 3: 4, il bit casuale è 0. Se 1: 2 > 3: 4, il bit casuale è 1.
- Sto ‘ sto parlando di velocità del vento, pressione barometrica, temperatura, umidità, ecc. Puoi fare un campione di misurazioni e avere difficoltà a discutere contro la casualità a tale riguardo. Inoltre, la sola temperatura misurata con una precisione sufficiente è molto casuale.
Risposta
Di che tipo di casuale stai parlando about?
Esistono due proprietà principali che definiscono casuale in senso matematico: la prima è imprevedibilità e il secondo è distribuzione uniforme .
Se stai parlando di il primo, è generalmente quasi impossibile generarlo interamente allinterno del software (e farlo correttamente). Ci sono alcuni modi, come raccogliere entropia da dispositivi di interfaccia umana, ad es. /dev/random
in Linux, ma generiamo un livello abbastanza basso di entropia per essere utili. Altri hanno già indicato alcune implementazioni hardware. Hanno tutti radici profonde nella teoria della fisica (come la nostra convinzione che il momento preciso in cui un fotone colpisce un rilevatore sia veramente casuale). Esistono alcuni algoritmi software per questo, come Blum-Blum-Shub . In generale, non scrivere un PRNG se hai bisogno di imprevedibilità, ma piuttosto usane uno stabilito . Questo vale soprattutto per le criptovalute.
Laltra proprietà importante delle funzioni casuali è in realtà abbastanza facile da soddisfare. Ci sono molti esempi di questo, come lRNG dietro RC4 , Linear Feedback Shift Registers (questo è stato effettivamente utilizzato anche per le criptovalute, una volta, ma non è stato trovato sufficientemente sicuro), ecc.Anche la libreria C standard rand()
probabilmente funzionerà bene per questo scopo.
La cosa più importante: assicurati di sapere quale delle due proprietà è fondamentale per le tue necessità. Anche i imprevedibili PRNG sono distribuiti uniformemente, ma il contrario non è vero. Inoltre, se stai esponendo la casualità allinterno di un “motore” di qualche tipo (come un motore di gioco), assicurati che le persone non possano giocare con il sistema, perché potresti essere sorpreso di quanto sia facile in realtà. Ad esempio, CSS (lalgoritmo di crittografia del DVD) ha utilizzato 2 LSFR per scopi di crittografia ed è stato violato abbastanza facilmente.
Risposta
Primo , non puoi generare numeri veramente casuali nel software. Ci sono un sacco di algoritmi diversi che ti consentono di generare numeri pseudo-casuali. A seconda del motivo per cui hai bisogno di numeri pseudo-casuali (cioè se li stai usando in crittografia i requisiti sono molti diverso), useresti generalmente qualcosa come il generatore di numeri casuali nella libreria scientifica GNU (che, ovviamente, puoi implementare in qualsiasi lingua preferisci).
Risposta
Hardware. Devi connetterti a hardware in grado di raccogliere entropia da … ovunque. Leggi le statiche da un radio, mettere una webcamera su un lavalamp, o fare in modo che lutente digiti parole incomprensibili o giochi con il mouse. Senza alcun contatto con il mondo reale, la generazione della casualità è impossibile. È unarea importante o f studio, e molto lavoro è stato messo in esso. Dubito che stai per tracciare nuove strade, quindi dovresti davvero stare sulle spalle dei giganti e iniziare a leggere le voci di Wikipedia.
“La generazione di numeri casuali è troppo importante per essere lasciata a possibilità. “
-Robert R. Coveyou
MODIFICA
So I” ve ho imparato che lhardware che desideri è in realtà solo un chip CMOS . Il tipo di fotocamere economiche. Basta tenerlo nelloscurità, impostare la sensibilità verso lalto, e apparentemente le minime variazioni che osserva hanno radici nella meccanica quantistica, che è dove deriviamo la nostra entropia nella vita reale.
Risposta
Lultima volta che ho guardato, che era LOOOOONG tempo fa, il riferimento canonico sullimplementazione di generatori di numeri pseudocasuali (PRNG ) è Knuth, vol. 2, “Seminumerical Algorithms” .
Non PENSARE nemmeno di provare a implementare il tuo PRNG finché non hai almeno esaminato Knuth.
Lascia un commento