Algoritmo ELO per gestire persone che non giocano spesso


9

Sto usando l'algoritmo ELO per classificare i giocatori in una competizione di pong in corso. La maggior parte dei giocatori gioca ogni giorno, ma abbiamo un giocatore che non gioca da un mese. Il mio algoritmo attualmente tiene traccia dei punteggi solo negli ultimi 30 giorni e, di conseguenza, questo giocatore sta rapidamente salendo di livello, nonostante non abbia mai giocato. Ha perso un sacco di sue prime partite, ma ha vinto la maggior parte delle sue ultime partite, il che significa che le sue perdite stanno cadendo dalle classifiche e il suo punteggio sta aumentando di conseguenza.

Ovviamente, il mio piano di abbandonare i punteggi dopo 30 giorni non funziona. Quali altri metodi posso usare per penalizzare i giocatori che non giocano spesso?

L'unica cosa che ho escogitato finora è ridurre i punti in base alla percentuale che si basa sui giorni di inattività (cioè se un utente non ha giocato in una settimana, i suoi punti valgono solo il 70% del normale, e avrebbe dovuto giocare X volte per tornare al 100% di punti).

Tuttavia, questo sembra troppo arbitrario. Qualcuno ha idee o suggerimenti migliori per gestire i giocatori inattivi in ​​un ambiente altrimenti attivo?

Grazie in anticipo.

Risposte:


18

Sembra che tu stia memorizzando i punti assegnati per ogni partita e poi 'scadendo' tali aggiustamenti dei punti nel tempo. Che, come hai notato, è aperto a un facile sfruttamento.

In un'implementazione ELO standard, il tuo punteggio ELO è per sempre; non "decadono" nel tempo, poiché avere dei punti in questo modo in grado di portare alla fine il sistema di classificazione porterà alla deflazione complessiva del punteggio (vale a dire: 1500 non significherà più "media").

Ricorda che le classifiche ELO non sono "punti" nel modo in cui i giocatori di solito le pensano; sono un tentativo di classificare il livello di abilità di un giocatore rispetto ad altri giocatori, non sono una ricompensa. Questi punti non dovrebbero essere portati via come punizione per il giocatore, perché sono l'unico strumento che devi provare per abbinare i giocatori contro avversari con un livello di abilità simile. L'unica cosa che dovrebbe influenzare questi valori - mai - sono le vittorie e le perdite contro altri giocatori classificati.

L'approccio adottato dalla maggior parte dei giochi che vogliono impedire ai giocatori di raggiungere un punteggio elevato e poi sparire, per non giocare mai più, è avere un requisito di attività per il display della classifica; se un giocatore non gioca da 30 giorni (o altro), semplicemente non si presenta alle classifiche fino a quando non lo fa. Quando il giocatore ritorna e gioca un'altra partita classificata, ritorna con la sua classifica ELO completa, esattamente come se non fosse mai partita. Se il loro livello di abilità è cambiato rispetto ad altri giocatori attivi nel frattempo, il gioco lo noterà rapidamente e modificherà il loro ranking, attraverso il processo standard di vincere e perdere partite contro avversari.


1
+1 mentre questa è la spiegazione corretta del motivo per cui questo non funziona, lascerei semplicemente cadere ELO e scegliere qualcosa di completamente diverso. (Non so cosa, o l'avrei pubblicato ^^)
o0 '.

4
@Lohoris Sarebbe una scelta di sviluppo perfettamente sensata. Se l'obiettivo non è quello di mantenere un confronto significativo dei livelli oggettivi di abilità delle persone l'uno rispetto all'altro (ad es. Per scopi di matchmaking), ELO non è un'ottima scelta da utilizzare come meccanismo di punteggio. E ci sono anche alcuni giochi là fuori che usano un sistema come ELO sotto il cofano per il matchmaking, mentre usano un sistema di "punti" completamente diverso per scopi di visualizzazione, che consente loro di premiare le persone per giocare più frequentemente. StarCraft 2 fa questo, per esempio.
Trevor Powell,

4

Algoritmi come Elo e TrueSkill determinano l'abilità di un giocatore in base al risultato di ogni partita giocata, senza riguardo al passare del tempo. Tuttavia, entrambi gli algoritmi presentano un fattore di "incertezza": nel caso di Elo, esiste un valore K Factorgeneralmente elevato per i nuovi giocatori, in modo tale che il loro punteggio Elo converga rapidamente con il loro "vero" livello di abilità. Dopo un tempo prestabilito o un determinato numero di partite, K Factorviene normalmente ridotta, in modo che la valutazione cambi di meno tra le partite.

Quello che stai vedendo è probabilmente il tipico comportamento di Elo (a seconda della tua implementazione di Elo): il tuo giocatore ha giocato meno giochi rispetto ai suoi concorrenti, il che lo rende un "nuovo giocatore" con un punteggio più alto K Factor; da quando sta vincendo i suoi giochi, l'algoritmo lo vede come un giocatore più abile e gli conferisce un punteggio più alto!

Si noti che gli algoritmi di classificazione vengono generalmente utilizzati solo per confronti tra giocatori e non per determinare il risultato delle competizioni, dato il loro comportamento. Dato che vuoi premiare la partecipazione, consiglierei di segnare i giocatori nella competizione in un altro modo. Alcuni suggerimenti:

  • Segna i giocatori in base al numero di vittorie.
  • Assegna i valori in punti a vittorie / perdite, ad esempio 2 punti per una vittoria, 1 punto per una perdita.
  • Conta solo i migliori giochi X del giocatore in una determinata settimana / mese.
  • Richiede ai giocatori di giocare un numero minimo di partite per "qualificarsi".

Nota che nessuna di queste soluzioni darà un risultato completamente "equo", in quanto i giocatori che giocano di più avranno un punteggio più alto rispetto ai giocatori che non lo fanno. L'unico modo per garantire l'equità è che i giocatori giochino un numero identico di partite.


Penso che sia giusto che i giocatori che giocano di più (pur avendo lo stesso rapporto medio di vincite / perdite) abbiano un punteggio più alto rispetto ai giocatori che non giocano così tanto ...
David Gouveia,

3
@davidluzgouveia - non è strettamente la definizione di "giusto". Quando si segnano i giocatori in un torneo, il risultato è "giusto" se nessun giocatore ha un vantaggio che un altro giocatore non ha (indipendentemente dall'abilità). Detto questo, penso che il caso di cui stiamo parlando sia una competizione casuale tra amici; il punteggio riguarda più l'incoraggiamento alla partecipazione che la vittoria assoluta.
Blair Holloway il

Sì, questa è una competizione casuale piuttosto che un torneo rigoroso. Sono d'accordo con il commento di David, ovviamente, motivo per cui sto cercando una soluzione qui. Grazie per il tuo contributo!
Jemaclus,

0

Non conosco l'algoritmo ELO, ma che ne dici di penalizzare le persone che non giocano spesso, premi le persone che giocano spesso? Ad esempio, se hai reso il tuo punteggio qualcosa di simile:

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

Quindi le persone che giocano spesso finiranno probabilmente per giocare più giochi e avere più possibilità di ottenere un punteggio più alto.

E un'altra cosa che potresti voler cambiare è impedire che lo spurgo dei vecchi punteggi abbia un impatto sul punteggio totale del giocatore. Questo è il motivo principale per cui quel giocatore sta salendo in classifica (e anche perché alla fine cadrà completamente fuori dalle classifiche).

Inoltre, le persone che suonano seriamente per un po 'e raggiungono un ottimo track record, probabilmente non saranno felici sapendo che i loro risultati alla fine svaniranno e scompariranno. Tale sistema è seriamente scoraggiante.

Ciò è facilmente risolvibile semplicemente mantenendo una cache delle "partite totali giocate" di ogni giocatore e del "rapporto vincite / perdite", anche dopo aver eliminato i punteggi stessi.

Con queste informazioni puoi facilmente dedurre quante vittorie e perdite ha avuto il giocatore e aggiornarle di conseguenza ogni volta che gioca di nuovo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.