Algoritmo ELO para lidar com pessoas que não tocam frequentemente


9

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.

Respostas:


18

Parece que você está armazenando os pontos concedidos para cada partida e depois 'expirando' esses ajustes de pontos ao longo do tempo. O qual, como você notou, está aberto à exploração fácil.

Em uma implementação padrão da ELO, sua pontuação na ELO é para sempre; não "decai" ao longo do tempo, uma vez que a saída de pontos do sistema de classificação levará a uma deflação geral na pontuação (ou seja: 1500 não significa mais "média").

Lembre-se de que os rankings da ELO não são "pontos" da maneira que os jogadores costumam pensar neles; eles são uma tentativa de classificar o nível de habilidade de um jogador em relação a outros jogadores, eles não são uma recompensa. Esses pontos não devem ser retirados como punição para o jogador, porque eles são a única ferramenta que você precisa para combinar jogadores contra oponentes com um nível de habilidade semelhante. A única coisa que deve afetar esses valores - sempre - são vitórias e derrotas contra outros jogadores classificados.

A abordagem adotada pela maioria dos jogos que deseja impedir que os jogadores obtenham uma pontuação alta e depois desapareçam, para nunca mais jogar novamente, é ter um requisito de atividade para a exibição no placar; se um jogador não joga há 30 dias (ou o que for), ele simplesmente não aparece nas tabelas de classificação até aparecer. Quando o jogador retorna e joga outra partida classificada, ele retorna com seu ranking ELO completo, exatamente como se nunca tivesse saído. Se seu nível de habilidade mudou em relação a outros jogadores ativos nesse meio tempo, o jogo notará rapidamente isso e ajustará sua classificação, através do processo padrão de ganhar e perder partidas contra adversários.


11
+1 enquanto esta é a explicação correta sobre por que isso está falhando, basta soltar a ELO e optar por algo completamente diferente. (Eu não sei o que, ou eu teria postado ^^)
o0 '.

4
@ Lohoris Essa seria uma opção de desenvolvimento perfeitamente sensata. Se o objetivo não é manter uma comparação significativa dos níveis objetivos de habilidade das pessoas em relação umas às outras (por exemplo, para fins de organização de partidas), a ELO não é uma ótima opção para ser usada como mecanismo de pontuação. E existem até alguns jogos por aí que usam um sistema como o ELO sob o capô para jogos, enquanto usam um sistema de "pontos" totalmente diferente para fins de exibição, o que lhes permite recompensar as pessoas por jogarem com mais frequência. StarCraft 2 faz isso, por exemplo.
Trevor Powell

4

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 Factorgeralmente 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 valor K 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:

  • Pontuação jogadores com base no número de vitórias.
  • Atribua valores de pontos a vitórias / derrotas, por exemplo, 2 pontos por vitória, 1 ponto por perda.
  • Conte apenas os melhores jogos X do jogador em uma determinada semana / mês.
  • Exija que os jogadores joguem um número mínimo de jogos para "se qualificar".

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.


Eu acho que é justo que os jogadores que jogam mais (ao ter a mesma proporção média win / perda) deve ter uma pontuação maior do que jogadores que não jogam tanto ...
David Gouveia

3
@davidluzgouveia - essa não é estritamente a definição de "justo". Ao marcar jogadores em um torneio, o resultado é "justo" se nenhum jogador tiver uma vantagem que outro jogador não possui (sem respeito à habilidade). Dito isto, acho que o caso sobre o qual estamos falando é uma competição casual entre amigos; a pontuação tem mais a ver com incentivar a participação do que vencer.
Blair Holloway

Sim, esta é uma competição casual e não um torneio estrito. Concordo com o comentário de David, obviamente, e é por isso que estou procurando uma solução aqui. Obrigado pela sua contribuição!
Jemaclus 13/12

0

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:

Score = (Wins / Losses) * (Total Games Played) * Some_Scale_Factor

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.