2009-02-06 11 views
5

Si basa su this question. Sono state proposte diverse risposte che generano distribuzioni non uniformi e ho iniziato a chiedermi come quantificare la non uniformità dell'output. Non sto cercando problemi di modellatura, solo aspetti a valore singolo.Come quantificare la qualità di un generatore di numeri pseudocasuali?

Quali sono le procedure accettate?


Il mio pensiero attuale è quella di computer media Shannon entropy per chiamata calcolando l'entropia di ogni valore e prendendo una media ponderata. Questo può quindi essere compilato al valore previsto.

Le mie preoccupazioni sono

  1. È corretto?
  2. Come calcolare questi valori senza perdere la precisione?

Per # 1 Mi chiedo se ho corretto.

Per il n. 2 la preoccupazione è che elaborerei numeri con grandezze come 1/7 +/- 1e-18 e sono preoccupato che gli errori in virgola mobile mi uccidano per qualsiasi problema tranne i più piccoli. La forma esatta del calcolo potrebbe comportare alcune importanti differenze qui e mi sembra di ricordare che ci sono alcune opzioni ASM per alcuni casi di log speciali ma non riesco a trovare i documenti su questo.


In questo caso l'uso è prendere un PRNG "buono" per la gamma [1,n] e generare uno SRNG per la gamma [1,m]. La domanda è quanto peggio sono i risultati rispetto all'input?

Quello che ho è previsto tassi di occorrenza per ogni valore di uscita.

risposta

4

NIST dispone di un set di documenti e strumenti per analizzare statisticamente i generatori di numeri casuali attraversando una varietà di metriche.

http://csrc.nist.gov/groups/ST/toolkit/rng/index.html

Molti di questi test sono anche incorporati nella suite di test Dieharder PRNG.

http://www.phy.duke.edu/~rgb/General/rand_rate.php

ci sono un sacco di diversi parametri, perché ci sono molti, molti modi diversi di utilizzare PRNGs. Non puoi analizzare un PRNG nel vuoto: devi capire il caso d'uso. Questi strumenti e questi documenti forniscono molte informazioni per aiutarti in questo, ma alla fine della giornata dovrai ancora capire che cosa hai realmente bisogno prima di poter determinare se l'algoritmo è adatto. La documentazione NIST è completa, anche se piuttosto densa.

-Adam

1

This page discute un modo di controllare se hai trovato una cattiva distribuzione: riportando i valori pseudo-casuali in un campo e poi solo a guardarli.

+0

non quantificabile e se ottengo 0,25000000001 percento in un secchio l'occhio non lo vedrà mai. – BCS

0

TestU01 ha un test ancora più impegnativo rispetto al Dieharder. Il set di test più grande si chiama "BigCrush", ma richiede molto tempo per essere eseguito, quindi ci sono anche sottoinsiemi chiamati solo "Crush" e "SmallCrush". L'idea è di provare prima SmallCrush, e se il PRNG lo passa, prova Crush, e se lo passa, BigCrush.Se passa anche questo, dovrebbe essere abbastanza buono.

È possibile ottenere TestU01 here.

Problemi correlati