Pergunta

Em nosso escritório, nós regularmente aproveitar algumas rodadas de futebol pebolim / mesa depois do trabalho. Tenho juntos um pequeno programa java que gera lineups 2vs2 aleatórias dos jogadores disponíveis e armazena os resultados dos jogos em um banco de dados mais tarde.

A previsão atual do resultado usa uma média simples de todos os resultados dos jogos anteriores dos 4 jogadores envolvidos. Isto dá uma estimativa muito grosseira, mas eu gostaria de substituí-lo por algo mais sofisticado, levando em conta coisas como:

  • jogadores pode ser bom jogar como atacante, mas ruim como zagueiro (ou vice-versa)
  • jogadores fazem bem contra um adversário específico / ruim contra os outros
  • algumas equipes trabalham bem juntos, outros não
  • habilidades de mudança ao longo do tempo

Qual seria o melhor algoritmo para prever o resultado do jogo com a maior precisão possível?

Alguém sugeriu o uso de uma rede neural para isso, o que soa bastante interessante ... mas eu não tenho conhecimento suficiente sobre o assunto para dizer se isso poderia funcionar, e eu também suspeito que pode levar muitos jogos para ser razoavelmente treinados .

EDIT:
Teve que tomar uma ruptura mais longa do presente devido a alguns prazos do projeto. Para tornar a questão mais específica:

Dada a tabela mysql seguinte contendo todos os jogos disputados até agora:

table match_result

match_id      int pk
match_start   datetime
duration      int (match length in seconds)
blue_defense  int fk to table player
blue_attack   int fk to table player
red_defense   int fk to table player
red_attack    int fk to table player
score_blue    int
score_red     int

Como você escrever uma função predictResult (blueDef, blueAtk, redDef, redAtk) {...}
para estimar o resultado, tanto quanto possível, a execução de qualquer sql, fazendo cálculos ou usando bibliotecas externas?

Foi útil?

Solução

Use o algoritmo TrueSkill, é muito bom nisso. Eu tenho implementado lo para pebolim e xadrez e ele funciona muito bem. Colegas de trabalho têm-me dito que é quase muito bom nisso.

Para obter detalhes completos sobre como ele funciona bem como um link para a minha aplicação, ver meu " Computing sua habilidade " post.

Outras dicas

Por que usar um neuralnet? Use estatísticas, provavelmente, a correlação entre cada jogador seria uma boa medida.

Só para começar, vamos recolher algumas informações: Para um determinado jogador que precisamos:

  1. a posição que desempenhou
  2. a pontuação final

Um bom atacante irá acumular pontos. Um bom defensor vai pontos impede de ser marcado.

A informação real será de um bom atacante jogando contra um bom defensor.

Tente aplicar Naive Bayes classificador.

aprendizagem Bayesian é uma probabilística abordagem que se baseia em uma pressuposto que as quantidades de juros são regidos pela probabilidade distribuições e que óptima decisões podem ser feitas pelo raciocínio sobre estas probabilidades em conjunto com dados observados. [Mitchell, T. (1997), Machine Learning]

A mesma distribuição exata dos jogadores pode resultar em diferentes resultados dos jogos. Se os dados tem um padrão nele, um padrão com base em suas variáveis, Naive Bayes classificador pode produzir bons resultados.

O algoritmo não é muito complexo. Eu acho que, um com algum conhecimento em probabilidade, pode entender e aplicá-lo.

Em sistemas de detecção de intrusão, ele está sendo usado para determinar anomalias de rede, olhando para vários parâmetros de rede. Bayesiana abordagem pode ser muito bem sucedido em tipos particulares de dados e produzir produtos de alta TP & FP taxas baixas. Mas também pode resultar em taxas de PF de altura, dependendo de seus dados. Seus dados vai determinar a melhor abordagem.

Você pode usar Weka ( http: //www.cs.waikato. ac.nz/~ml/weka/ ), uma biblioteca de software de mineração de dados, e experimentar diferentes algoritmos. Ele contém o classificador Naive Bayes. Basta tentar e ver.

Uma opção seria a de tentar adivinhar a propagação ponto como algum tipo de modelo linear . Se você tem mais jogos do que jogadores que você, pode fazer uma mínimos quadrados se encaixam de pontos por jogador através da construção de uma matriz de jogos (+1 para o jogador em uma equipe, -1 para o outro, 0 para espectador) para todos os jogos e resultado vector para os spreads.

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