Como criar um gerador aleatório
On Fevereiro 10, 2021 by adminComo poderia um gerador aleatório ser implementado?
Não estou falando sobre a invocação de uma linguagem método mathRandom () , mas a implementação das rotinas que levam a gerar números totalmente aleatórios.
Comentários
- I ‘ atrevo-me a dizer que a aleatoriedade verdadeira não é possível no momento.
- @Dynamic Acho que o mesmo acho, mas sempre invoquei a função aleatória quando necessário, mas não tenho ‘ t ideia de como um método aleatório deve ser implementado.
- ” totalmente aleatório ” é uma toca de coelho muito profunda.
- @Dynamic: É realmente trivial obter uma sequência indistinguível de dados verdadeiramente aleatórios, contanto que você olhe para o mundo exterior com suporte de hardware. Física atômica e subatômica, (decaimento atômico, eventos do tipo de sensores que atingem fótons) é (na extensão o f teoria da ciência atual) verdadeiramente aleatório e fácil de medir. A termodinâmica em grande escala é tão caótica que podemos considerá-la aleatória quando inspecionamos o sistema macro na escala micro etc. O ruído de um sensor de câmera digital é um bom exemplo …
Resposta
A chave para um número verdadeiramente aleatório é a fonte de dados aleatória. Às vezes, são informações como atrasos em eventos de teclado ou eventos de rede. Onde dados aleatórios de alta qualidade são desejados, podem ser decaimento radioativo . SGI implementou lavarand , que extraiu sua semente para um gerador de números aleatórios a partir de uma imagem digitalizada de uma lâmpada de lava. Isso foi suficiente para ser considerado um gerador de números aleatórios.
Fora dos dados verdadeiramente aleatórios, pode-se trabalhar com um sistema determinístico, mas caótico. Por exemplo, o mersenne twister . Nessas situações, semeia-se o gerador com um número e depois o executa para obter números pseudo-aleatórios. Eles são suficientes para jogos e similares em que não é crítico se alguém pode determinar a semente (e o próximo número na sequência).
Considere ler a patente 5,732,138 e http://www.lavarnd.org/ para os detalhes de implementação sobre como fazer um número.
Comentários
- +1 Eu consideraria diferentes fontes de dados, como medições do clima para sua semente. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com o desafio com as medições do tempo é que elas não são completamente aleatórias. Existe um campo inteiro sobre a previsão do tempo. A temperatura tende a subir então diminui ao longo de um dia. O inverno é mais frio do que o verão. O sistema hotbits usa a aleatoriedade de cronometrar dois eventos de decaimento que são imprevisíveis (medir o tempo do evento 1 ao evento 2 e o tempo do evento 3 ao evento 4 – se 1 : 2 == 3: 4, jogue fora os dados. Se 1: 2 3: 4, o bit aleatório é 0. Se 1: 2 > 3: 4, o bit aleatório é 1.
- Eu ‘ estou falando sobre velocidade do vento, pressão barométrica, temperatura, umidade, etc. Você pode tirar uma amostra das medições e ter dificuldade em argumentar contra a aleatoriedade a esse respeito. Além disso, apenas a temperatura medida com precisão suficiente é muito aleatória.
Resposta
De que tipo de aleatório você está falando sobre?
Existem duas propriedades principais que definem o aleatório no sentido matemático: a primeira é imprevisibilidade e o segundo é distribuição uniforme .
Se você está falando sobre o primeiro, geralmente é quase impossível gerá-lo inteiramente dentro do software (e fazê-lo corretamente). Existem algumas maneiras, como reunir entropia de dispositivos de interface humana, por exemplo, /dev/random
no Linux, mas geramos um nível bastante baixo de entropia para ser útil. Outros já apontaram algumas implementações de hardware. Todos eles têm raízes profundas na teoria da física (como nossa crença de que o momento preciso em que um fóton atinge um detector é verdadeiramente aleatório). Existem alguns algoritmos de software para isso, como Blum-Blum-Shub . Em geral, não “escreva um PRNG se precisar de imprevisibilidade, mas sim use um já estabelecido . Isso vale especialmente para criptografia.
A outra propriedade importante das funções aleatórias é, na verdade, bastante fácil de satisfazer. Existem muitos exemplos disso, como o RNG por trás de RC4 , Registradores de deslocamento de feedback linear (foi realmente usado para criptografia também, uma vez, mas foi considerada insuficientemente segura), etc.Mesmo a biblioteca C padrão rand()
provavelmente funcionará bem para esse propósito.
Mais importante: certifique-se de saber qual das duas propriedades é fundamental para sua necessidade. Imprevisível PRNGs também são distribuídos uniformemente, mas o contrário não é verdade. Além disso, se você estiver expondo a aleatoriedade dentro de um “mecanismo” de algum tipo (como um mecanismo de jogo), certifique-se de que as pessoas não possam manipular o sistema, porque você pode se surpreender com o quão fácil isso realmente é. Por exemplo, CSS (o algoritmo de criptografia de DVD) usou 2 LSFRs para fins de criptografia e foi quebrado facilmente.
Resposta
Primeiro , você não pode gerar números realmente aleatórios no software. Há uma tonelada de algoritmos diferentes que permitem gerar números pseudo-aleatórios. Dependendo de por que você precisa de números pseudo-aleatórios (ou seja, se você estiver usando-os em criptografia, os requisitos são muitos diferente), você geralmente usaria algo como o gerador de números aleatórios na biblioteca científica GNU (que, é claro, você pode implementar em qualquer idioma de sua preferência).
Resposta
Hardware. Você precisa se conectar a um hardware que possa reunir entropia de … em qualquer lugar. Leia a estática de um rádio, coloque uma webcamera em uma lâmpada de laval, ou faça com que o usuário digite gibberish ou brinque com o mouse. Sem algum contato com o mundo real, é impossível gerar uma verdadeira aleatoriedade. É uma área importante o f estudo, e muito trabalho foi colocado nisso. Duvido que você esteja abrindo novos caminhos, então você realmente deveria se apoiar nos ombros de gigantes e começar a ler as entradas da Wikipédia.
“A geração de números aleatórios é muito importante para ser deixada para chance. “
-Robert R. Coveyou
EDITAR
Então, eu” vi aprendi que o hardware que você deseja é na verdade apenas um chip CMOS . O tipo de câmeras baratas. Basta mantê-lo no escuro, definir a sensibilidade para cima e, aparentemente, as variações mínimas que ele observa têm raízes na mecânica quântica, que é de onde derivamos nossa entropia na vida real.
Resposta
A última vez que olhei, há LOOOOONG atrás, a referência canônica na implementação de geradores de números pseudoaleatórios (PRNG ) é Knuth, Vol. 2, “Algoritmos Seminuméricos” .
Nem PENSE em tentar implementar seu próprio PRNG antes de pelo menos dar uma olhada no Knuth.
Deixe uma resposta