Czy ktoś ma ulubiony generator liczb losowych doładowania i czy możesz wyjaśnić trochę, jak zaimplementować go w kodzie. Próbuję zmusić maszynę do pracy z mersenne i zastanawiałem się, czy ktoś ma preferencje wobec jednego z pozostałych.Boost generator liczb losowych
Odpowiedz
Kod ten jest dostosowany z podręcznika przypominające w 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;
}
}
Aby wyjaśnić bity:
mt19937
jest generatorem Twister Mersenne generująca surowych liczb losowych. Użyty jest tu typedef, dzięki czemu można łatwo zmienić typ generatora liczb losowych.rng
jest instancją generatora twister.one_to_six
jest instancją dystrybucji . Określa liczby, które chcemy wygenerować, oraz rozkład, który śledzą. Tutaj chcemy 1 do 6, równomiernie rozmieszczonych.dice
to rzecz, która przyjmuje nieprzetworzone liczby i dystrybucję i tworzy dla nas liczby, które naprawdę chcemy.dice()
jest wezwaniem dooperator()
dla obiektudice
, który dostaje następną liczbę losową w wyniku podziału, symulując losowo sześciokątną rzut kośćmi.
W obecnej postaci kod generuje za każdym razem tę samą sekwencję kostek. Można losowo generować generator w swoim konstruktorze:
RNGType rng(time(0));
lub przy użyciu jego elementu seed().
Nie ma jednego uniwersalnego RNG. Czasami ważne są właściwości statystyczne, czasem kryptologia, czasem surowa prędkość.
Nie koniecznie chciałem mieć jeden rozmiar, po prostu wiem, że niektórzy wolą jedno od drugiego i chciałem zobaczyć, którzy ludzie najbardziej lubili. – shinjuo
Znalazłem to link, które daje dobry przegląd właściwości różnych generatorów liczb losowych. Mam skopiowane tabelę z powyższego linku dla wygody:
+-----------------------+-------------------+-----------------------------+------------------------+ | 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 | +-----------------------+-------------------+-----------------------------+------------------------+
długość cyklu: Długość losowej sekwencji liczb zanim zacznie powtarzać
- 1. Generator liczb losowych Crossplatform
- 2. Specjalny prosty generator liczb losowych
- 3. Generator liczb losowych skalowalnych case klasy
- 4. Uniwersalny generator liczb losowych w postaci wątku
- 5. Generator liczb losowych z iOS i Androidem
- 6. Jak zasiać generator liczb losowych w Swift?
- 7. Czy istnieje generator liczb losowych z zakresem?
- 8. Generator liczb losowych o prawdopodobieństwie rozproszonym
- 9. Generator liczb losowych, który wytwarza dystrybucję energii?
- 10. Generator losowych macierzy Java
- 11. Wywołanie funkcji generowania liczb losowych nie generuje całkowicie losowych liczb.
- 12. generator liczb losowych między 0 - 1000 w C#
- 13. Jak udowodnić, że generator liczb losowych jest lepszy od drugiego?
- 14. Generator plików losowych (ponownie!)
- 15. Jak zresetować silnik liczb losowych?
- 16. javascript ken generator generator liczb
- 17. C++ 11 liczb losowych
- 18. Generowanie liczb losowych CUDA
- 19. Uzyskiwanie liczb losowych z listy liczb całkowitych
- 20. Generowanie liczb losowych bez użycia operacji bitowych
- 21. równomiernie rozłożona generacja liczb losowych
- 22. Algorytm dla "gładkich" liczb losowych
- 23. Siew Wiele liczb losowych Generatory
- 24. Generowanie liczb losowych w Swift
- 25. Niejednorodna implementacja generatora liczb losowych?
- 26. liczb losowych nie tak losowe
- 27. Jak wygenerować listę liczb losowych?
- 28. Ruby zachowanie #detect losowych liczb
- 29. Generowanie liczb losowych bez powtórzeń
- 30. Ile liczb losowych używa std :: uniform_real_distribution?
A czy jest jakiś sposób na min i max rozkładu całkowitej zostać zmienione bez konieczności tworzenia nowych "kostek"? –
Czy ktoś wie, jak ustawić losowe zaszczepienie przy użyciu tego generatora? –