Estou usando o algoritmo ELO para classificar jogadores em uma competição de pong em andamento. A maioria dos jogadores joga todos os dias, mas temos um jogador que não joga há um mês. Atualmente, meu algoritmo rastreia apenas as pontuações nos últimos 30 dias e, como resultado, esse jogador está subindo rapidamente nas classificações, apesar de nunca ter jogado. Ele perdeu muitos de seus primeiros jogos, mas venceu a maioria de seus últimos jogos, o que significa que suas perdas estão caindo nas paradas e sua pontuação está subindo como resultado.
Obviamente, meu plano de diminuir a pontuação após 30 dias não está funcionando. Quais outros métodos posso penalizar os jogadores por não jogarem com frequência?
A única coisa que eu sugeri até agora é reduzir os pontos com base na porcentagem baseada nos dias de inatividade (por exemplo, se um usuário não jogar há uma semana, seus pontos valem apenas 70% do normal, e ele teria que jogar X vezes para voltar a 100% de pontos).
No entanto, isso parece muito arbitrário. Alguém tem idéias ou sugestões melhores para lidar com jogadores inativos em um ambiente ativo?
Desde já, obrigado.
fonte
Algoritmos como Elo e TrueSkill determinam a habilidade de um jogador com base no resultado de cada jogo jogado, sem levar em consideração a passagem do tempo. No entanto, ambos os algoritmos vêm com um fator de "incerteza" - no caso de Elo,
K Factor
geralmente existe um alto para novos jogadores, de modo que sua classificação Elo convergirá rapidamente para sua "verdadeira" habilidade. Após um tempo definido ou um número definido de jogos, o valorK Factor
é normalmente reduzido, para que a classificação mude menos entre os jogos.O que você está vendo provavelmente é um comportamento típico do Elo (dependendo da sua implementação do Elo): seu jogador jogou menos jogos que seus concorrentes, o que o torna um "novo jogador" com um valor mais alto
K Factor
; desde que ele está vencendo seus jogos, o algoritmo o vê como um jogador com mais habilidades e lhe concede uma classificação mais alta!Observe que os algoritmos de classificação geralmente são usados apenas para comparações entre jogadores, e não para determinar o resultado das competições, dado seu comportamento. Dado que você deseja recompensar a participação, eu recomendaria marcar jogadores na competição de outra maneira. Algumas sugestões:
Observe que nenhuma dessas soluções dará um resultado completamente "justo", pois os jogadores que jogam mais terão uma pontuação mais alta do que os jogadores que não. A única maneira de garantir justiça é os jogadores jogarem um número idêntico de jogos.
fonte
Eu não sei sobre o algoritmo ELO, mas que tal, em vez de penalizar as pessoas que não jogam com frequência, você recompensa as pessoas que jogam com frequência? Por exemplo, se você fez sua pontuação algo como:
Então as pessoas que jogam com frequência provavelmente acabariam jogando mais jogos e tendo mais chances de alcançar uma pontuação mais alta.
E outra coisa que você pode querer mudar é impedir que a eliminação de pontuações antigas tenha impacto na pontuação total do jogador. Essa é a principal razão pela qual esse jogador está subindo na hierarquia (e também porque ele acabará caindo completamente fora das paradas).
Além disso, as pessoas que tocam seriamente por um tempo e alcançam um ótimo histórico, provavelmente não ficarão felizes sabendo que suas conquistas acabarão desaparecendo e desaparecendo. Esse sistema é seriamente desencorajador.
Isso é facilmente corrigido apenas mantendo um cache do "total de jogos jogados" e da "proporção de vitória / perda" de cada jogador, mesmo depois de você excluir as próprias pontuações.
Com essas informações, você pode deduzir facilmente quantas vitórias e derrotas o jogador teve e atualizá-las de acordo sempre que jogar novamente.
fonte