Pergunta

Estou implementando uma seleção roleta, e eu gostaria de manter o máximo de código possível no SQL. Minha tentativa rendeu a consulta abaixo. $ 1 é uma variável aleatória do mesmo intervalo do peso que eu enviar para o código SQL (que não estava claro como fazer random () ser chamado apenas uma vez). O peso é o tamanho do entalhe da linha no volante. aleatória () é uma função SQLITE que retorna um número aleatório. Aqui está a consulta na íntegra:

SELECT id
FROM items
WHERE weight >= $1
ORDER BY random()
LIMIT 1

A minha pergunta é, isso é ainda a roleta? O algoritmo básico exigiria o somatório de todos os pesos, em seguida, escolher um valor aleatório do 0..sum gama - isso seria determinar qual linha foi selecionado. Em vez esta primeira filtros de rotina todas as linhas que atendem um número aleatório, então embaralha sua ordem e pega o primeiro.

Uma mudança sutil é o uso de US $ 1 em vez de uma segunda chamada para random (). Isso pode tornar o mais justo de rotina, mas eu não estou certo de que ele faz -. Isso significaria que cada linha foi dada a sua própria chance de ser filtrada ou não

Então, eu acho que eu estou perguntando quanto faz isso roleta espelho, uma vez que, obviamente, segue diferentes etapas. Mas fá-lo espelhar os resultados?

Foi útil?

Solução

Uma coisa que eu só pensava é que este não é roleta por causa desta prova simples por exemplo:

Se você tivesse três itens, um de cada um peso, dois e três, então a roleta iria escolher-los com 1 / 6th, 2 / 6ths e 3 / 6ths probabilidade. No entanto, a minha rotina seria viés maior peso:

Filter, A  ,   B,   C
  1   , 1/3, 1/3, 1/3
  2   , 0  , 1/2, 1/2
  3   , 0  , 0  , 1

Acima você pode ver que para cada um dos valores de filter ($1 na questão), os itens A, B e C são mostrados com as respectivas possibilidades de seleção. Adicionando-se tudo isso daria probabilidades combinadas de A, B e C ser 2 / 18ths, 5 / 18ths e 11 / 18ths.

Isto é diferente de roda de roleta, a consulta na questão parece bias pesos maiores. Então, para responder à minha própria pergunta, a roleta espelhos de consulta, mas não combiná-lo.

Isso me leva a perguntar se você escolheu filtro em uma distribuição não-linear particular, você poderia ainda fazer esta consulta não só espelho, mas roda jogo de roleta? E o que a distribuição seria?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top