Concordo com as respostas anteriores de que a aleatoriedade real em pequenas execuções de alguns jogos é indesejável - parece injusta demais para alguns casos de uso.
Eu escrevi um Shuffle Bag simples como implementação em Ruby e fiz alguns testes. A implementação fez o seguinte:
- Se ainda parecer justo ou não tivermos atingido um limite de jogadas mínimas, ele retornará um acerto justo com base na probabilidade normal.
- Se a probabilidade observada de jogadas passadas fizer com que pareça injusta, ela retornará um acerto "justo".
É considerado injusto com base nas probabilidades de fronteira. Por exemplo, para uma probabilidade de 20%, você pode definir 10% como limite inferior e 40% como limite superior.
Usando esses limites, descobri que, com execuções de 10 ocorrências, 14,2% do tempo, a verdadeira implementação pseudoaleatória produzia resultados que estavam fora desses limites . Cerca de 11% das vezes, 0 acertos críticos foram marcados em 10 tentativas. 3,3% das vezes, 5 ou mais acertos críticos foram atingidos em 10. Naturalmente, usando esse algoritmo (com uma contagem mínima de rolagem de 5), uma quantidade muito menor (0,03%) das execuções "Fairish" estava fora dos limites . Mesmo que a implementação abaixo seja inadequada (coisas mais inteligentes podem ser feitas, certamente), vale a pena notar que, notavelmente, com frequência, seus usuários sentem que é injusto com uma solução pseudo-aleatória real.
Aqui está a carne do meu FairishBag
escrito em Ruby. Toda a implementação e a rápida simulação de Monte Carlo estão disponíveis aqui (essência) .
def fire!
hit = if @rolls >= @min_rolls && observed_probability > @unfair_high
false
elsif @rolls >= @min_rolls && observed_probability < @unfair_low
true
else
rand <= @probability
end
@hits += 1 if hit
@rolls += 1
return hit
end
def observed_probability
@hits.to_f / @rolls
end
Atualização: o uso desse método aumenta a probabilidade geral de obter um acerto crítico, para cerca de 22% usando os limites acima. Você pode compensar isso definindo sua probabilidade "real" um pouco menor. Uma probabilidade de 17,5% com a modificação fairish gera uma probabilidade de longo prazo observada de cerca de 20%, e mantém as corridas de curto prazo se sentindo justas.