Algoritmo de geração de número aleatório para cérebros humanos? [fechadas]

37

Você está ciente ou criou algum algoritmo prático "prático", simples de aprender, que permite aos humanos gerar números aleatórios (um tanto "verdadeiros")? Por "in-head" quero dizer .. de preferência sem ferramentas ou dispositivos externos. Além disso, é desejável uma saída alta (muitos números aleatórios por minuto).

Perguntou isso no SO, mas não conseguiu muito interesse. Talvez isso seja mais adequado para programadores.

Magnus Wolffelt
fonte
7
@ S.Lott Eu não acho nada absurdo. Não é prático? Porque claro. Absurdo? Certamente não. E mesmo que fosse, o absurdo pode pavimentar o caminho para pensamentos novos e úteis.
biziclop
21
9 .... 9 .... 9 .... 9 - Você não pode provar que não é aleatório.
13
S.Lott: A idéia de um gerador de números pseudo-aleatórios fácil de calcular não é absolutamente absurda. Eu acho que o OP quer uma maneira de evitar o viés humano aqui ....
Jens
8
Acho engraçado (e ao mesmo tempo levemente deprimente) quantas pessoas parecem gostar de um argumento de ignorância. "Não consigo imaginar, portanto, não pode existir", ou respostas que estão completamente erradas.
biziclop
4
Esta questão parece estar fora de tópico, porque se refere à capacidade cognitiva de um indivíduo e não à programação.

Respostas:

36

Aqui está um algoritmo de George Marsaglia :

Escolha um número de 2 dígitos, digamos 23, sua "semente".

Forme um novo número de 2 dígitos: o dígito dos 10 mais 6 vezes o dígito das unidades.

A sequência de exemplo é 23 -> 20 -> 02 -> 12 -> 13 -> 19 -> 55 -> 35 -> ...

e seu período é da ordem do multiplicador 6 no grupo de resíduos relativamente primo ao módulo 10. (59 neste caso).

Os "dígitos aleatórios" são os dígitos das unidades dos números de 2 dígitos, ou seja, 3,0,2,2,3,9,5, ... a sequência mod 10. A aritmética é simples o suficiente para ser executada no seu cabeça.

Davo
fonte
Isso parece muito bom.
biziclop
4
Isso pode não ser um problema para as necessidades de uma pessoa em particular, mas oferece apenas 90 fluxos diferentes.
compman
5
79, 79, 79, 79, 79, 79, 79, 79, 79, 79, oh não! Suponho que você deva ficar <= 60, o que funciona bem porque você pode usar o relógio como uma semente se não tiver uma.
eds
4
@eds Hum, o que? 79 -> 61 -> 15 -> ...
Izkata
11
Talvez @eds significasse 59. Todos os números de 1 a 58 parecem ser um jogo justo.
Erhannis
26

Confira este artigo sobre Geomancia . Especificamente a seção sobre a geração de gráficos geomânticos . Envolve uma técnica de geração de número pseudo-aleatório usando dígitos binários e algum cálculo recursivo simples. Parece que você poderia fazer isso em sua cabeça com bastante facilidade (embora um pedaço de papel ajudasse).

Disclaimer: Eu não tentei eu mesmo; quando preciso de um número aleatório o suficiente, obtenho alguma saída /dev/random, uso randem qualquer idioma que eu tenha à mão ou rolo meu confiável d20.

Se você é um prodígio da matemática, o método do quadrado do meio é um método computacionalmente leve, se bem visivelmente não confiável.

Inaimathi
fonte
3
+1 Acho que esta é a primeira resposta séria a esta pergunta. Um pouco triste.
Jens
@ Magnus Wolffelt - Lembrei-me de ter sido mencionado em uma palestra no TED por Ron Eglash sobre o significado cultural da geometria fractal na África; "Adivinhação na Areia Bamana". É bastante interessante, embora eu ainda não tenha idéia do que você usaria essa técnica agora, pois não precisamos mais de adivinhos. ted.com/talks/ron_eglash_on_african_fractals.html
Inaimathi
11
Até onde posso ver, esse método geomântico simplesmente permite que você 'melhore' (suponho que 'debias' seria um termo melhor) uma fonte de aleatoriedade. Não é para ser espirrado, mas não é exatamente o que o OP estava procurando. O que não quer dizer que não é muito ....
Norman Grey
@ Norman Gray - O cérebro humano pode apresentar números arbitrários tendenciosos por padrão.
Inaimathi
@Iimaimathi Exatamente: é por isso que os números de debiasing seriam importantes e o método que você apontou é útil. Ou estou te entendendo mal.
Norman Gray
10

Eu acho que uma suposição razoável é que você precisa confiar na grande quantidade de informações verbais que armazena em seu cérebro. A fonte pode ser qualquer coisa, letras de músicas, poemas, esboços de Monty Python, mas deve ser algo que você saiba de cor.

Então você tem que selecionar uma parte bastante aleatória, eliminando tanto quanto possível o viés inconsciente. Uma maneira de fazer isso, por exemplo, seria selecionar uma música, escolher um número kentre 10 e 20 e, em seguida, encontrar a kletra th em suas letras.

Obviamente, isso não fornecerá uma distribuição uniforme por si só, já que a frequência das letras é diferente, mas é uma letra aleatória, no entanto, ou pelo menos o mais próxima que eu acredito que seja possível sem uma fonte externa.

Atualização: A propósito, quando as pessoas são solicitadas a escrever uma sequência aleatória de lançamentos de moedas, o erro mais comum é, de longe, tornar sua sequência "muito aleatória": séries de resultados idênticos serão muito curtas, o que é uma duração simples análise irá revelar. Este método visa principalmente evitar essa armadilha. É claro que outras anomalias podem surgir da sombra desse viés de duração da execução, mas você precisará de experimentos adequados para encontrá-las. Ironicamente, um algoritmo para gerar números aleatórios pensando apenas não pode ser encontrado pensando sozinho.

Biziclop
fonte
Mesmo assim, eu esperaria que você fosse tendencioso de várias maneiras sutis. (IE tendendo a escolher o mesmo grupo de músicas)
Zachary K
@Zachary K Sem dúvida, mas você também teria que escolher um número, o que o espalha um pouco. Embora o viés nunca possa ser eliminado, esse método quase certamente o impede de saber qual letra você escolherá (embora com o tempo você deva memorizar algumas).
biziclop
Eini mini miny moe, como costumávamos fazer quando crianças.
Zachary K
2
"escolha um número k entre 10 e 20". 17. O número menos aleatório.
S.Lott 18/02
@ S.Lott Não importa o quão aleatório é esse número. A única razão pela qual você precisa é que tende a se lembrar das primeiras letras das coisas com mais facilidade.
biziclop
9

Experimente o seu relógio.

Eu faço isso se precisar de um número aleatório que é um fator de 60 (segundos). Tome o módulo apropriado a qualquer hora. 16:17:23 PM, simulando uma rolagem de dados, passa a 5.

Mark Canlas
fonte
E por um grande número por minuto?
Gary Rowe
Não tenho certeza se eu sigo. Você está dizendo para fazer o pool de números 3600 incluindo minutos? Eu acho, mas quanto maior o número, menos aleatório seria? Como se você não pudesse colher amostras tão rapidamente.
Mark Canlas
11
Gary Rowe Esse critério deve ser descartado, receio, simplesmente porque, independentemente do método usado, o cérebro humano é simplesmente muito lento.
biziclop
Desculpe-me, eu só queria saber como a sua abordagem funciona se você precisar de mais de 60 números por minuto. Em retrospectiva, pedir a um cérebro humano que produza muitos números por minuto vai maximizar isso de qualquer maneira, então não se preocupe.
Gary Rowe
@biziclop Sem problemas. Parece que tive uma colisão de comentários enquanto considerava a situação com a abordagem de @ Mark.
Gary Rowe
5

Excelente pergunta. Receio que uma boa resposta possa ser muito difícil.

Mas, para começar, é muito fácil gerar aleatoriedade "verdadeira" quando duas pessoas estão envolvidas: basta deixar uma delas contar silenciosamente em seu módulo de cabeça algum número, e a outra dizer "pare" após um intervalo arbitrário. Posteriormente, esse número pode ser transformado em outras distribuições usando métodos padrão.

Para tornar esse método robusto, o módulo não deve ser muito grande, caso contrário, haverá um forte viés contra pequenos números. Eu realmente estaria interessado em ver se existe algum trabalho analisando as propriedades estocásticas desse método.

Konrad Rudolph
fonte
É importante que a contagem seja feita rapidamente, eu acho - a pessoa que conta deve tomar cuidado para não contar ritmicamente, apenas 1 ou 2 passos por segundo. Porque deve haver um número significativo de ciclos (intuitivamente ≥4) através de todos os números para obter entropia suficiente.
Aaron Thoma
Sugestão de melhoria para uma melhor aleatoriedade : a pessoa que faz a contagem escolhe uma semente aleatória secreta X₀ entre 0 e o módulo primeiro; em combinação com a contagem, isso deve fornecer aleatoriedade decente com um esforço de pensamento ainda mínimo (mesmo quando contando lentamente, em relação à duração da contagem; ou seja, baixo número de ciclos - intuitivamente, ≥2 seria bom; <2 seria bom).
Aaron Thoma
4

Esta é uma questão complexa; Vou tentar explicar um pouco sem me afastar muito do mato.

Primeiro, temos que perguntar "o que é a verdadeira aleatoriedade"? Tais discussões rapidamente degeneram em águas filosóficas, mas a essência é esta: "é o universo verdadeiramente aleatório"? Em outras palavras, se você quantifica tempo e matéria, pode calcular o próximo estado do universo a partir do atual? Se sim, então o universo é determinístico e não há aleatoriedade verdadeira (veja o que quero dizer com "filosófico"?)

Como a "aleatoriedade verdadeira" é difícil de definir, geralmente aceitamos a "pseudo-aleatoriedade". Isso geralmente é necessário ao gerar números "aleatórios" em um computador, é claro.

O gerador mais simples de números pseudo-aleatórios seria algo como o famoso algoritmo "9 .. 9 .. 9 .." de Dilbert. Mas, intuitivamente, não parece muito bom (o que obviamente é a piada). Os estatísticos desenvolveram uma série de testes para dizer se uma sequência de resultados supostamente aleatórios é "boa". Comece com a página da wikipedia para "teste do qui quadrado" e você pode passar uma tarde lendo sobre esses testes.

Um algoritmo de computador simples como um "gerador congruencial linear" produz números bons o suficiente para um teste qui-quadrado (você ainda precisa "semear" esse algoritmo de alguma coisa).

O próximo passo em "bondade" é "aleatoriedade criptograficamente forte", o que significa que, dada uma sequência a1, a2, ... você não pode prever o próximo número na sequência com "probabilidade razoável", a menos que você use muita computação. Esses números são chamados às vezes de "pseudo-aleatório computacionalmente". Uma maneira comum de obter essa sequência é através de uma "cadeia de hash" assim: a1 = SHA512 (a2), a2 = SHA512 (a3), ... Como acreditamos (com base na experiência, não na prova matemática) que o SHA512 é computacionalmente difícil de inverter, acreditamos que a2 é "impossível" de prever, dado apenas a1.

Então agora surge a pergunta: qual é a melhor coisa que os humanos podem fazer sob as regras estipuladas na sua pergunta? Os seres humanos são notoriamente ruins em gerar aleatoriedade; costumava haver um site em que você tentava gerar lançamentos de moedas digitando "aleatoriamente" H, T, T, H, H, T, T etc. como se estivesse lançando uma moeda (mas você faz isso em sua cabeça). Depois de um tempo, o site começaria a prever seus flips melhor que 50% das vezes (usando um modelo Markov oculto). Nós somos apenas ruins nisso.

Existem maneiras de melhorar a situação usando várias técnicas de mistura que provavelmente são possíveis em sua cabeça. E existem até aplicativos que eu poderia imaginar por que você pode querer isso (prisioneiro político quer criptografar uma mensagem para aliados externos). Mas acho que este post é longo o suficiente. :)

Fixee
fonte
11
Embora exista um processo físico verdadeiramente aleatório aberto a debate (embora experimentos envolvendo o paradoxo da EPR sugiram uma resposta positiva), existe uma definição teórica de uma sequência aleatória, com base na complexidade de Kolmogorov.
biziclop
3

A verdadeira razão da proliferação de RNGs baseados em ferramentas é que um bom algoritmo direto para geração de números aleatórios ainda está para ser desenvolvido .

Felizmente, os geradores de números aleatórios portáteis - incluindo moedas para o flop, dados (com vários números de facetas) para rolar, cartões para a colheita e canudos para o desenho - são relativamente fáceis de obter a baixo custo. Além disso, para os tecnófilos entre nós, existem algumas boas simulações dessas ferramentas disponíveis para a maioria das plataformas móveis.

Eu recomendaria sinceramente qualquer um desses sobre qualquer alternativa de produtos de carne.

Kramii Restabelecer Monica
fonte
11
E esses dispositivos físicos realmente têm uma natureza imprevisível para eles, portanto, em certo sentido, são mais aleatórios do que os melhores algoritmos de computador.
Omega Centauri
( @OmegaCentauri: Naturalmente eu vejo o que você fez lá; o!) (Não tenho certeza o trocadilho foi destinado, mas eu gosto :).) )
Aaron Thoma
3

Altamente randomizado, grande quantidade por minuto e gerado por humanos? Não vai acontecer

Os principais problemas com os quais você vai se deparar são

  • As pessoas ficam entediadas rapidamente, para que os padrões ocorram rapidamente
  • O cérebro humano tem muita estrutura dedicada ao reconhecimento / criação de padrões, então você terá que derrotar isso
  • Números verdadeiramente aleatórios contêm repetições que os humanos tentam evitar
  • Os seres humanos não são bons com grandes números

Isso levou muitos criptografadores a abandonar técnicas "in-head" em favor de processos externos aleatórios, porque era muito simples elaborar padrões com base em números "in-head".

Fora do tópico, mas interessante

Embora não seja um mecanismo para gerar números aleatórios em sua cabeça, o algoritmo Solitaire (como retratado no Cryptonomicon de Neal Stephenson ) demonstra como é difícil usar números aleatórios para fins criptográficos. Requer apenas um baralho de cartas comum para criar uma saída razoavelmente segura, mas o método é bastante complicado.

Gary Rowe
fonte
11
Eu acho que isso não responde à pergunta. Os 4 pontos da sua resposta se aplicam apenas se as pessoas tentarem encontrar números aleatórios sem um algoritmo. Eu acho que o OP está ciente disso e é por isso que ele pede um algoritmo que as pessoas possam fazer na cabeça e dar bons resultados, ou seja, não sofram os problemas mencionados em sua resposta.
FabianB
2

Estou genuinamente curioso sobre qualquer coisa que as pessoas possam ter encontrado sobre esse problema.

Afaste-se da mesa e vá para Las Vegas.

A humanidade tem dezenas de procedimentos aleatórios. Você pode ver todos eles em Las Vegas.

Você tem círculos girando. Você tem cubos caindo. E você embaralhou os tokens. Todos eles funcionam maravilhosamente bem.

Cubos são talvez os mais antigos. Aparentemente, havia palitos alongados de quatro lados usados ​​em um ponto. Knucklebones cúbicos simétricos de ovelhas eram populares há milênios. Temos usado esses tipos de randomizadores desde - provavelmente - mais ou menos na mesma época em que desenvolvemos a linguagem.

http://itunes.apple.com/us/app/motionx-dice/id287509231?mt=8

"Qualquer um que considere métodos aritméticos de produzir dígitos aleatórios está, é claro, em um estado de pecado"

--- John von Neumann

S.Lott
fonte
7
Voto negativo - não estou interessado em ferramentas externas para gerar números aleatórios, mas em algoritmos in-head que podem confiar em memórias ou estímulos para gerar números verdadeiramente aleatórios.
Magnus Wolffelt
3
você não pode jogar dados na sua cabeça
jk.
2
@ jk01: Correto. Você também não pode fazer coisas aleatórias na sua cabeça.
S.Lott 18/02
@ S.Lott - Acho que o que você quer dizer é "Um ser humano típico não pode gerar números consistentemente aleatórios em sua cabeça em alta velocidade usando o método ingênuo e nenhuma ferramenta externa".
Inaimathi
11
@Inaimathi. Não, estou dizendo algo muito mais forte. Você não pode fazer coisas aleatórias na sua cabeça. Seu cérebro está cheio de preconceitos, então você precisa de um algoritmo. Nenhum algoritmo finito, eficaz e determinístico é aleatório. Você simplesmente não pode fazer isso. Nenhum algoritmo simples o suficiente é pseudoaleatório, portanto você não pode se aproximar aleatoriamente. Os dados são pequenos, acessíveis e têm um longo e longo histórico de uso.
S.Lott 18/02
1

Não consigo pensar em nada. Na verdade, eu esperaria que qualquer coisa que surgisse tivesse tantos preconceitos que seria inútil.

Se eu precisar de números aleatórios, geralmente jogo dados.

Zachary K
fonte
0

Você está pedindo um LCM que possa fazer na sua cabeça? Observe que a ideia de que isso é melhor do que dados permanece absurda.

No entanto, isso é tão aleatório quanto qualquer algoritmo finito, definido e eficaz pode ser.

http://www.vias.org/simulations/simusoft_lincong.html

http://www1.i2r.a-star.edu.sg/~knandakumar/nrg/Tms/Probability/Probgenerator.htm

U_ {k + 1} = (a \ vezes U_k + b) mod (m + 1).

É mais fácil ver o que isso está fazendo se escolhermos pequenos valores a = 5, b = 1 em = 7. Você deve conseguir fazer isso em sua cabeça.

S.Lott
fonte
Gostaria de saber se existe uma versão decentemente aleatória disso ( gerador congruencial linear (LCG) ), que é realmente fácil de fazer na cabeça? a = 1 idealmente, a = 2 segundos - idealmente. (Meus pensamentos até agora sobre isso no próximo comentário.)
Aaron Thoma
(( Eu pensei que a = 1, b prime, b habilmente escolhido, poderia ser uma alternativa mais viável para m maiores, que ainda funcionaria bem. Então notei que isso provavelmente não é verdade: para b≈0 ou b≈m, percorrer seqüencialmente os números; então, pensei que b≈m / 2 é a resposta; mas então notei que isso também poderia ser seqüencial (para pequenos | b – m / 2 | / m), apenas em duas posições alternadamente. b≈m / 3, poderia ser seqüencial, alternando entre 3 posições; para b≈m / 99 o problema não estaria mais em forma alternada, mas seriam necessários ~ 99 passos para percorrer uma subtração do módulo. ))
Aaron Thoma