¿Alguien tiene un generador de números aleatorios de refuerzo favorito y puede explicar un poco sobre cómo implementarlo en el código. Estoy tratando de hacer funcionar al misterioso tornado y me preguntaba si alguien tenía preferencia por uno de los otros.Boost generador de números aleatorios
Respuesta
Este código está adaptado del manual de impulso en 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;
}
}
Para explicar los bits:
mt19937
es el generador tornado Mersenne, que genera los números aleatorios primas. Un typedef se usa aquí para que pueda cambiar fácilmente el tipo de generador de números aleatorios.rng
es una instancia del generador de twister.one_to_six
es una instancia de distribución. Esto especifica los números que queremos generar y la distribución que siguen. Aquí queremos 1 a 6, distribuidos uniformemente.dice
es lo que toma los números brutos y la distribución, y crea para nosotros los números que realmente queremos.dice()
es una llamada aoperator()
para el objetodice
, que obtiene el siguiente número aleatorio tras la distribución, simulando un tiro al azar dados de seis caras.
Tal como está, este código produce la misma secuencia de lanzamiento de dados cada vez. Puede aleatorizar el generador en su constructor:
RNGType rng(time(0));
o usando su miembro seed().
No hay un RNG único para todos. A veces, las propiedades estadísticas son importantes, a veces la criptología, a veces la velocidad bruta.
No necesariamente quería una talla única, solo sé que algunas personas prefieren una sobre la otra y yo quería ver cuáles les gustaba más a las personas. – shinjuo
Encontré este link que da una buena descripción de las propiedades de diferentes generadores de números aleatorios. He copiado la tabla de enlace de arriba por conveniencia:
+-----------------------+-------------------+-----------------------------+------------------------+ | 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 | +-----------------------+-------------------+-----------------------------+------------------------+
longitud de ciclo de: longitud de la secuencia de números aleatorios antes de que comience la repetición de
- 1. Generador de números aleatorios sesgado
- 2. Crappy generador de números aleatorios
- 3. c - generador de números aleatorios
- 4. Generador de números aleatorios de Gauss
- 5. Generador de números aleatorios de probabilidad
- 6. Generador de números aleatorios en CUDA
- 7. Generador de números aleatorios no repetitivo
- 8. impulsar la biblioteca de números aleatorios, el uso mismo generador de números aleatorios para diferentes generadores variate
- 9. generador de números aleatorios uniforme a prueba de hilos
- 10. Modificar el rango de un generador de números aleatorios uniforme
- 11. En Xorshift de números aleatorios algoritmo generador de
- 12. Pseudo generador de números aleatorios con densidad fija de 1s
- 13. Cómo crear números aleatorios únicos de un generador aleatorio dado
- 14. Implementación no uniforme del generador de números aleatorios?
- 15. C# Generador de números aleatorios atorado en un ciclo
- 16. Generador de números aleatorios en C# - valores únicos
- 17. Generador de números aleatorios imparcial utilizando uno sesgado
- 18. Generador de números aleatorios que genera enteros para Java
- 19. Implementando el generador de números aleatorios Box-Mueller en C#
- 20. Cómo obtener números aleatorios con el generador equivocado
- 21. Generador de objetos aleatorios JSON
- 22. Gran generación de números aleatorios
- 23. Generar números aleatorios distribuidos por Zipf
- 24. especial de números aleatorios
- 25. Análisis de números aleatorios
- 26. Probabilidad de números aleatorios
- 27. Números aleatorios de la distribución Beta, C++
- 28. Uso de números aleatorios con GPU
- 29. ¿Existen generadores de números aleatorios sin estado?
- 30. Números aleatorios no repetitivos
y hay alguna manera de la min y max de la distribución de número entero ser cambiado sin tener que construir un nuevo "dado"? –
¿Alguien sabe cómo establecer la siembra aleatoria con este generador? –