mercoledì 10 febbraio 2016

Advanced Duel Shell: Elo e Leghe

E' passato più di anno da quando ho iniziato lo sviluppo dell'Advaced Duel Shell(se non sapete cosa sia, cliccate qua). Ho quasi del tutto terminato la progettazione concettuale del programma, mentre è partito già lo sviluppo pratico (che, facendo nel tempo libero, richiederà parecchio tempo). Ho tuttavia dei dubbi sull'implementazione o meno di alcune funzioni. Vorrei chiedere quindi il vostro parere:


Questione di qualità
Per il rating utilizzerò un algoritmo Elo (una variante di quello usato negli scacchi) che ho provato in diverse simulazioni. Il calcolo penalizza le sconfitte contro avversari più deboli(togliendo più punti), mentre premia le vittorie contro avversari più forti(dando più punti).
Nelle simulazioni ho notato però due problematiche:
  1. Perdere le prime partite porta all'essere significatamente svantaggiati nella risalita della classifica. Poichè il sistema di matchmaking tende a far giocare con player con un rating simile, le possibilità di fare una gran quantità di punti (o perderne) giocando contro un avversario molto più forte (o debole) di noi sono molto scarse.
  2. La media dei rating tende ad aumentare in maniera proporzionale al tempo. Simulando circa 200 partite per ogni utente, il rating medio è di 500; con circa 1600, il rating medio sale a 2000. L'inflazione del punteggio medio porta a essere irrisori i 64 punti massimi ottenibili/perdibili con una vittoria/sconfitta, e il rating finisce per non essere più un efficace contatore della forza assoluta di un giocatore.
Imponendo un limite minimo di 1 punto, il sistema si stabilizza, in quanto crea un grosso gruppo di giocatori considerati egualmente principianti, non distanti tra di loro nel punteggio. I più inesperti potranno passare quindi meno tempo nella coda (e quindi fare più esperienza) e potranno beneficiare di un aumento di punteggio senza rischio affossarsi ulteriormente.

E', secondo voi, il caso di diminuire la quantità di punti ottenibili con una vittoria mano a mano che si sale di rating(es. vincere avendo 1000 punti dà un massimo di 10 punti, vincere avendone 500, un massimo di 30)per evitare "fughe" da parte di chi è più in alto?
Le simulazioni implementando questo limite creano una classifica molto schiacciata in alto, trovandosi in breve tempo con molti giocatori ad alto punteggio, e pochissimi a basso punteggio, anche se molti hanno perso parecchie partite.

Aristocrazia
Al secondo problema va incontro anche il sistema di rating utilizzato da Dueling Network. La loro soluzione è quella di azzerare periodicamente il rating dei giocatori. Sebbene molto efficace, essa è totalmente anti-meritocratica, anche perchè porta a ogni reset i giocatori con tanta esperienza a confrontarsi con utenti principianti, accentuando il primo problema dell'algoritmo.
Il famosissimo MOBA League of Legends mi ha suggerito l'idea di dividere i giocatori in leghe separate, che seguano queste regole:
  • Le leghe sono 4: Bronzo, Argento, Oro e Platino. Esistono leghe separate per i duelli singoli e per i match (Bronzo Singolo e Bronzo Match, etc.etc.)
  • Il matchmaking accoppia preferibilmente i giocatori facenti parte della stessa lega, o, se necessario, di quelle immediatamente adiacenti.
  • Un giocatore che raggiunga i 1000 punti nella propria lega, entra in fase di promozione: se vince le successive 3 partite, viene promosso alla lega superiore(se esiste, viceversa si continuano a accumulare normalmente punti).
  • Se un giocatore con 1 punto viene sconfitto, viene retrocesso nella lega inferiore (se esiste).
  • Un giocatore appena promosso o retrocesso, parte con 100 punti nella nuova lega di appartenenza.
  • Se non si gioca nessuna partita per 7 giorni, dall'8° giorno in poi si perdono punti ogni 24 ore: 0 punti in Bronzo, 25 in Argento, 50 in Oro, 100 in Platino.
  • Ogni qualvolta viene aggiornata la Lista delle Carte Proibite e Limitate, a tutti i giocatori della lega Platino vengono sottratti 800 punti. Se un giocatore scende sotto i 100 punti a causa di questa riduzione, viene portato d'ufficio a 100 punti.
  • Al momento dell'iscrizione, tutti i giocatori sono assegnati alla lega Bronzo
Implementare le leghe nel ramo Ranked delle partite è una buona idea? Se sì, condividete tutte le regole inserite per esse?
Le leghe consentono di impedire egregiamente l'inflazione dei punti, visto il loro cap a 1000, mantenendone il loro valore come misura della forza effettiva del giocatore. L'uso della sola diminuzione dei punti in lega Platino, invece del reset, consente a chi ha conquistato per merito un certo vantaggio, di mantenerlo. Tuttavia si rischia di spezzettare troppo il ramo Ranked, creando una aristocrazia di giocatori classificati più in alto, contro cui i più giovani non avranno possibilità di giocare.

Competizione
Ho deciso di confermare il supporto built-in ai tornei. Tutti i giocatori potranno organizzare tornei
con un interfaccia simile a quella del KTS. Ecco qui le principali caratteristiche:
  • Supporto per tutte le liste Carte Proibite e Limitate (comprese quelle personalizzate, in seguito)
  • Matchmaking automatico utilizzando il medesimo algoritmo del KTS(sia Svizzera, che Playoff, che entrambi). I giocatori potranno poi accordarsi per giocare la partita del torneo in una apposita sezione del menù.
  • Durata di ogni turno personalizzabile (anche in base al fuso orario). I giocatori partecipanti riceveranno una notifica a tempo quasi scaduto.
  • Possibilità di nominare uno o più judge che possa intervenire come admin nelle partite del torneo.
  • (in seguito) Possibilità di giocare in Sealed Pack Play oppure in Draft.
  • Notifica automatica ai giocatori ogni qualvolta un nuovo turno è calcolato.
  • Classifica in diretta sempre disponibile.
  • Possibilità di commento in diretta per le partite del torneo (Featured Match), udibile dagli spettatori della partita (in seguito).
  • Possibilità di libera iscrizione (da lobby apposita) e/o limiti sulla lega di appartenenza oppure il punteggio.
Sarei tentato di modificare il metodo di calcolo del tie-break utilizzato fino a ora dal KTS. Invece di utilizzare il solito calcolo basato sulle vittorie degli avversari e degli avversari degli avversari, basarsi su altro algoritmo Elo (con tutti gli inconvenienti già discussi).
Dovrei usare il solito tie-break, o uno calcolato diversamente?

Sarei molto felice di sentire la vostra opinione in proposito. Rispondetemi nei commenti al post, o con un messaggio alla nostra pagina Facebook.
Non appena avrò novità, non esiterò a pubblicarle

Grazie a tutti ^^

Nessun commento:

Posta un commento