Qualcuno ha un generatore di numeri casuali di boost preferito e puoi spiegare un po 'su come implementarlo in codice. Sto cercando di convincere il mersenne twister a lavorare e mi stavo chiedendo se qualcuno avesse preferenze verso uno degli altri.Boost generatore di numeri casuali
risposta
Questo codice è adattato dal manuale spinta a http://www.boost.org/doc/libs/1_42_0/libs/random/index.html:
#include <iostream>
#include "boost/random.hpp"
#include "boost/generator_iterator.hpp"
using namespace std;
int main() {
typedef boost::mt19937 RNGType;
RNGType rng;
boost::uniform_int<> one_to_six(1, 6);
boost::variate_generator< RNGType, boost::uniform_int<> >
dice(rng, one_to_six);
for (int i = 0; i < 6; i++) {
int n = dice();
cout << n << endl;
}
}
Per spiegare le punte:
mt19937
è il generatore twister Mersenne, che genera i numeri casuali grezzi. Qui viene usato un typedef in modo da poter cambiare facilmente il tipo di generatore di numeri casuali.rng
è un'istanza del generatore di torsione.one_to_six
è un'istanza di una distribuzione . Questo specifica i numeri che vogliamo generare e la distribuzione che seguono. Qui vogliamo 1 a 6, distribuiti uniformemente.dice
è la cosa che prende i numeri grezzi e la distribuzione e crea per noi i numeri che effettivamente vogliamo.dice()
è una chiamata allaoperator()
per l'oggettodice
, che ottiene il numero casuale successivo la distribuzione, simulando una casuale dadi laterale sei facce.
Così com'è, questo codice produce la stessa sequenza di dadi ogni volta. Puoi randomizzare il generatore nel suo costruttore:
RNGType rng(time(0));
o utilizzando il suo membro seed().
Non esiste un RNG valido per tutti. A volte le proprietà statistiche sono importanti, a volte crittografiche, a volte velocità grezza.
Non volevo necessariamente una taglia unica, so solo che alcune persone preferiscono l'una rispetto all'altra e volevo vedere quali persone piacevano di più. – shinjuo
Ho trovato questo link che offre una buona panoramica delle proprietà di diversi generatori di numeri casuali. Ho copiato la tabella dal link qui sopra per comodità:
+-----------------------+-------------------+-----------------------------+------------------------+ | generator | length of cycle | approx. memory requirements | approx. relative speed | +-----------------------+-------------------+-----------------------------+------------------------+ | minstd_rand | 2^31-2 | sizeof(int32_t) | 40 | | rand48 | 2^48-1 | sizeof(uint64_t) | 80 | | lrand48 (C library) | 2^48-1 | - | 20 | | ecuyer1988 | approx. 2^61 | 2*sizeof(int32_t) | 20 | | kreutzer1986 | ? | 1368*sizeof(uint32_t) | 60 | | hellekalek1995 | 2^31-1 | sizeof(int32_t) | 3 | | mt11213b | 2^11213-1 | 352*sizeof(uint32_t) | 100 | | mt19937 | 2^19937-1 | 625*sizeof(uint32_t) | 100 | | lagged_fibonacci607 | approx. 2^32000 | 607*sizeof(double) | 150 | | lagged_fibonacci1279 | approx. 2^67000 | 1279*sizeof(double) | 150 | | lagged_fibonacci2281 | approx. 2^120000 | 2281*sizeof(double) | 150 | | lagged_fibonacci3217 | approx. 2^170000 | 3217*sizeof(double) | 150 | | lagged_fibonacci4423 | approx. 2^230000 | 4423*sizeof(double) | 150 | | lagged_fibonacci9689 | approx. 2^510000 | 9689*sizeof(double) | 150 | | lagged_fibonacci19937 | approx. 2^1050000 | 19937*sizeof(double) | 150 | | lagged_fibonacci23209 | approx. 2^1200000 | 23209*sizeof(double) | 140 | | lagged_fibonacci44497 | approx. 2^2300000 | 44497*sizeof(double) | 60 | +-----------------------+-------------------+-----------------------------+------------------------+
durata del ciclo: lunghezza della sequenza di numeri casuali prima del suo inizio di ripetere
- 1. c - generatore di numeri casuali
- 2. Generatore casuale di numeri casuali
- 3. Generatore di numeri casuali Crossplatform
- 4. Progettazione di un generatore di numeri casuali
- 5. Generatore casuale di numeri casuali di probabilità
- 6. Come funziona un generatore di numeri casuali?
- 7. Generatore di numeri casuali uniforme thread-safe
- 8. Generatore di numeri casuali che genera numeri interi per Java
- 9. aumentare biblioteca di numeri casuali, usare lo stesso generatore di numeri casuali per i diversi generatori variati
- 10. Numeri casuali ponderati
- 11. Modifica dell'intervallo di un generatore di numeri casuali uniforme
- 12. Come funziona il generatore di numeri casuali di C#?
- 13. Generatore di numeri casuali comuni di iOS e Android
- 14. pacchetto (tipo cancella) un generatore di numeri casuali
- 15. thread-safe normale generatore di numeri casuali in F #
- 16. TI-84 Plus Algoritmo generatore di numeri casuali
- 17. Generatore di numeri casuali iOS in una nuova vista
- 18. Come si semina il generatore di numeri casuali in Swift?
- 19. Un buon generatore di numeri casuali per C
- 20. Generatore di numeri casuali senza pregiudizi con uno polarizzato
- 21. Generatore di numeri casuali a distribuzione uniforme molto veloce
- 22. C++ 11 generatore di numeri casuali UIntType contraddizione
- 23. Generatore di numeri casuali in C# - valori univoci
- 24. Come ottenere numeri casuali con il generatore errato
- 25. Come creare numeri casuali uniche da un dato generatore casuale
- 26. Generatore di oggetti JSON casuali
- 27. speciale di numeri casuali
- 28. I numeri casuali di Java non sono casuali?
- 29. Generazione di numeri casuali di grandi dimensioni
- 30. Generatore di file casuali (di nuovo!)
E c'è un modo del minimo e massimo della distribuzione intero essere cambiato senza dover costruire un nuovo "dado"? –
qualcuno sa come impostare il seeding casuale con questo generatore? –