Algoritmo ELO para manejar personas que no juegan a menudo

9

Estoy usando el algoritmo ELO para clasificar a los jugadores en una competencia de pong en curso. La mayoría de los jugadores juegan todos los días, pero tenemos un jugador que no ha jugado en un mes. Mi algoritmo actualmente solo rastrea los puntajes en los últimos 30 días y, como resultado, este jugador está aumentando rápidamente en los rangos, a pesar de nunca haber jugado. Perdió un montón de sus primeros juegos, pero ganó la mayoría de sus últimos juegos, lo que significa que sus pérdidas están bajando de las listas y su resultado está aumentando como resultado.

Obviamente, mi plan para dejar los puntajes después de 30 días no está funcionando. ¿Qué otros métodos puedo usar para penalizar a los jugadores por no jugar a menudo?

Lo único que se me ocurrió hasta ahora es reducir los puntos en función del porcentaje que se basa en los días de inactividad (es decir, si un usuario no ha jugado en una semana, sus puntos solo valen el 70% de lo normal, y tendría que jugar X veces para volver al 100% de los puntos).

Sin embargo, esto parece demasiado arbitrario. ¿Alguien tiene mejores ideas o sugerencias para manejar jugadores inactivos en un entorno activo?

Gracias por adelantado.

Jemaclus
fuente

Respuestas:

18

Parece que estás almacenando los puntos otorgados por cada partido y luego 'expirando' esos ajustes de puntos con el tiempo. Que, como habrás notado, está abierto a una fácil explotación.

En una implementación ELO estándar, su puntaje ELO es para siempre; no "decae" con el tiempo, ya que tener puntos que abandonan el sistema de clasificación de esta manera eventualmente conducirá a una deflación de puntaje general (es decir: 1500 ya no significará "promedio").

Recuerda que las clasificaciones ELO no son "puntos" en la forma en que los jugadores suelen pensar en ellos; son un intento de clasificar el nivel de habilidad de un jugador en relación con otros jugadores, no son una recompensa. Estos puntos no deben quitarse como castigo para el jugador, porque son la única herramienta que tiene para intentar unir jugadores contra oponentes de un nivel de habilidad similar. Lo único que debería afectar estos valores, siempre, son las victorias y las derrotas contra otros jugadores clasificados.

El enfoque adoptado por la mayoría de los juegos que quieren evitar que los jugadores logren un puntaje alto y luego desaparezcan, para nunca volver a jugar, es tener un requisito de actividad para la visualización de la tabla de clasificación; Si un jugador no ha jugado un juego en 30 días (o lo que sea), simplemente no aparecen en las tablas de clasificación hasta que lo hacen. Cuando el jugador regresa y juega otro partido clasificado, regresa con su clasificación ELO completa, exactamente como si nunca se hubiera ido. Si su nivel de habilidad ha cambiado en relación con otros jugadores activos en el ínterin, el juego lo notará rápidamente y ajustará su clasificación, a través del proceso estándar de ganar y perder partidos contra oponentes.

Trevor Powell
fuente
1
+1, si bien esta es la explicación correcta de por qué esto está fallando, simplemente dejaría caer el ELO y buscaría algo completamente diferente. (No sé qué, o lo habría publicado ^^)
o0 '.
44
@Lohoris Esa sería una opción de desarrollo perfectamente sensata. Si el objetivo no es mantener una comparación significativa de los niveles objetivos de habilidad de las personas entre sí (es decir, para fines de emparejamiento), entonces ELO no es una gran opción para usar como mecanismo de puntuación. E incluso hay algunos juegos que usan un sistema como ELO debajo del capó para emparejar, mientras que usan un sistema de "puntos" completamente diferente para mostrar, lo que les permite recompensar a las personas por jugar con más frecuencia. StarCraft 2 hace esto, por ejemplo.
Trevor Powell
4

Algoritmos como Elo y TrueSkill determinan la habilidad de un jugador en función del resultado de cada juego jugado, sin tener en cuenta el paso del tiempo. Sin embargo, ambos algoritmos vienen con un factor de "incertidumbre": en el caso de Elo, hay un nivel K Factorque generalmente se establece alto para los nuevos jugadores, de modo que su calificación de Elo convergerá rápidamente en su calificación de habilidad "verdadera". Después de un tiempo establecido o un número establecido de juegos, K Factornormalmente se reduce, por lo que la calificación cambia menos entre juegos.

Lo que está viendo es un comportamiento típico de Elo (dependiendo de su implementación de Elo): su jugador ha jugado menos juegos que sus competidores, lo que lo convierte en un "nuevo jugador" con un mayor K Factor; ¡ya que está ganando sus juegos, el algoritmo lo ve como un jugador mejor calificado y le otorga una clasificación más alta!

Tenga en cuenta que los algoritmos de clasificación generalmente se usan solo para comparaciones entre jugadores, y no para determinar el resultado de las competiciones, dado su comportamiento. Dado que desea recompensar la participación, le recomendaría calificar a los jugadores en la competencia de otra manera. Algunas sugerencias:

  • Puntuación jugadores basados ​​en el número de victorias.
  • Asigne valores de puntos a ganancias / pérdidas, por ejemplo, 2 puntos por una victoria, 1 punto por una pérdida.
  • Solo cuente los mejores juegos X del jugador en una semana / mes determinado.
  • Requerir que los jugadores jueguen un número mínimo de juegos para "calificar".

Tenga en cuenta que ninguna de estas soluciones dará un resultado completamente "justo", ya que los jugadores que juegan más tendrán una puntuación más alta que los jugadores que no lo hacen. La única forma de garantizar la equidad es que los jugadores jueguen un número idéntico de juegos.

Blair Holloway
fuente
Creo que es justo que los jugadores que juegan más (aunque tengan la misma proporción promedio de victorias / derrotas) tengan una puntuación más alta que los jugadores que no juegan tanto ...
David Gouveia
3
@davidluzgouveia: esa no es estrictamente la definición de "justo". Al anotar jugadores en un torneo, el resultado es "justo" si ningún jugador tiene una ventaja que otro jugador no tiene (sin importar su habilidad). Dicho esto, creo que el caso del que estamos hablando es una competencia casual entre amigos; el puntaje se trata más de alentar la participación que de ganar directamente.
Blair Holloway
Sí, esta es una competencia casual en lugar de un torneo estricto. Estoy de acuerdo con el comentario de David, obviamente, por eso estoy buscando una solución aquí. ¡Gracias por tu contribución!
Jemaclus
0

No sé sobre el algoritmo ELO, pero ¿qué tal si en lugar de penalizar a las personas que no juegan a menudo, recompensas a las personas que juegan a menudo? Por ejemplo, si hiciste tu puntaje algo como:

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

Entonces, las personas que juegan a menudo probablemente terminarían jugando más juegos y teniendo más oportunidades de lograr una puntuación más alta.

Y otra cosa que es posible que desee cambiar es evitar que la depuración de puntajes antiguos tenga un impacto en el puntaje total del jugador. Esa es la razón principal por la que ese jugador está subiendo en las filas (y también por qué eventualmente se caerá por completo de las listas).

Además, las personas que juegan seriamente por un tiempo y logran un gran historial, probablemente no estarán felices de saber que sus logros eventualmente se desvanecerán y desaparecerán. Ese sistema es seriamente desalentador.

Esto se soluciona fácilmente simplemente manteniendo un caché del "total de juegos jugados" y la "proporción de ganar / perder" de cada jugador, incluso después de eliminar los puntajes.

Con esa información, puede deducir fácilmente cuántas victorias y pérdidas tuvo el jugador y actualizarlas en consecuencia cada vez que juega de nuevo.

David Gouveia
fuente