Hearthstone

Dagli sviluppatori: bilanciamento dell'arena con la scienza

Dagli sviluppatori: bilanciamento dell'arena con la scienza

Ciao! Sono Tian, scienziato dei dati senior del team di Hearthstone e quest'oggi parleremo della matematica alla base del bilanciamento dell'Arena.

Le partite in Arena vengono giocate continuamente e generano tonnellate di dati che sfruttiamo per garantire un migliore bilanciamento dell'Arena. Si tratta di una mole di dati ENORME. Se dovessi lavorare ai Laboratori Boom, probabilmente sarei nel reparto di Scienza Matematica!

Il processo di bilanciamento

ABunchOfKnobs_option02.jpgIl bilanciamento dell'Arena viene effettuato in due fasi. Per prima cosa, bisogna determinare il gruppo (o i gruppi) a cui ogni carta appartiene (un gruppo è formato da un set di carte con rendimento qualitativo simile). In genere, una carta fa parte di due gruppi, inoltre dividiamo ulteriormente Leggendarie e non Leggendarie in altri due gruppi. Il gruppo in cui finisce ogni carta viene stabilito in base alla sua percentuale di vittorie e di scelta durante le partite. Questo significa che le tre carte mostrate durante la selezione hanno un livello di potere simile.

Dopodiché, bilanciamo la percentuale di vittorie fra le nove classi. Idealmente, dovrebbe essere il più vicina possibile al 50%. Questo bilanciamento si ottiene calibrando accuratamente i pesi associati a ogni carta. Il peso è numero che rappresenta la probabilità che una carta appaia durante la selezione. Più peso ha la carta, più alta sarà la probabilità di vederla durante la selezione. Se viene apportato un cambio al peso di una carta, questo influenzerà anche le probabilità che appaia il gruppo a cui appartiene.

Servono molti dati affinché il sistema funzioni, ma grazie al grandissimo numero di partite giocate in Arena ogni giorno, ne abbiamo a disposizione davvero tanti.

ThreeSteps_EK_600x260.png

Per utilizzare questi dati al fine di bilanciare il gioco sono necessari tre passaggi.

  1. Creare un modello
  2. Risolvere problemi di ottimizzazione
  3. Calcolare i pesi

Dopo aver fatto tutto questo, dobbiamo programmare degli hotfix per applicare i cambi.

Creare un modello

Se giochi abitualmente in Arena, il concetto di calcolo delle probabilità di vittoria dovrebbe esserti familiare. Alcune carte hanno un maggiore impatto sulla probabilità di vittoria rispetto ad altre. Per esempio, se in una partita si pesca il Re dei Lich, questo farà sì che la probabilità di vittoria si alzi maggiormente rispetto a quanto accadrebbe pescando un Pinguino Pinnafredda.

EN_SnowFlippaLichKing.png

Ipotizziamo che peschi un Re dei Lich in una partita. Potresti pensare: "Qual è la mia probabilità di vittoria ora che ho pescato il Re dei Lich? Sarà attorno al 60%? 50%? Come posso quantificare questa probabilità?" Ora ipotizziamo che il turno successivo pescherai una Barriera di Ghiaccio. In questo caso bisognerebbe ricalcolare la probabilità di vittoria.

Abbiamo costruito un modello di apprendimento automatizzato per rispondere a queste domande. Il computer sfrutta i dettagli di ogni partita d'arena giocata e apprende come predire la probabilità di vittoria in base alle informazioni ottenute. In altre parole, possiamo dire che abbiamo "addestrato" il modello che abbiamo costruito, in modo che sia in grado di fornire una probabilità di vittoria dato un numero X di carte pescate, ogni volta che vogliamo.

Risolvere problemi di ottimizzazione

ABunchOfKnobs_option03.jpgFacciamo un passo indietro e immaginiamo che questo modello sia una scatola con tante manopole da regolare. Ogni manopola è associata a una carta specifica. Quando se ne calibra una, in realtà si stanno calibrando anche i numeri associati a essa.

Ipotizziamo che prima di regolare una manopola la scatola dica che la probabilità di vittoria attuale è del 40%. Dopo aver giocato un turno, la probabilità prevista sale al 46%. Questo porta a una domanda molto interessante: Se si calibra un certo numero di manopole, sarà possibile portare la probabilità di vittoria a un numero desiderato?

Questa domanda conduce all'idea di dover risolvere un problema di ottimizzazione. In termini matematici, vogliamo trovare la soluzione migliore in assoluto tra quelle disponibili. Vogliamo avvicinarci il più possibile al nostro obiettivo "girando un paio di manopole" allo stesso tempo. In termini più formali, l'idea è quella di minimizzare alcune funzioni obiettivo su un vettore multidimensionale.

Per quanto riguarda il bilanciamento dell'Arena, vogliamo che la probabilità di vittoria prevista si avvicini il più possibile al 50% a prescindere dalla classe e per ottenere questo risultato cambiamo i numeri associati a ogni carta.

Ad ogni modo, le manopole non possono essere girate arbitrariamente. Devono essere applicati dei limiti. Ecco una lista dei limiti programmati nella nostra "scatola".

  • Il nuovo numero dovrebbe essere in un intorno del +/- 30% di un valore prefissato. Dei cambiamenti drastici potrebbero nuocere all'esperienza di gioco.
  • Se si vuole ridurre la forza di una classe in Arena, le sue carte migliori dovranno comparire meno spesso rispetto a quelle meno potenti. Se invece si vuole rendere una classe più forte, basterà fare il contrario di quanto appena detto.
  • Affinché il problema sia valido, vi è anche la necessità di alcuni limiti fisici. Per esempio, il totale delle vittorie deve coincidere con quello delle sconfitte, per quanto riguarda la probabilità di comparsa (somma zero, in termini matematici)

Calcolare i pesi

HeavyLooking.pngL'ultimo passaggio nell'uso dei dati dell'Arena per perfezionare il bilanciamento consiste nel regolare i pesi assegnati a ogni carta in base ai risultati dei primi due passaggi. In generale, una carta con peso 2,0 comparirà il doppio delle volte rispetto a un'altra con peso 1,0. L'ottimizzazione ci dirà quali sono "le manopole da girare" e "quanto girare queste manopole." Poi colleghiamo ogni "manopola" alla probabilità delle varie carte di comparire durante la selezione. A questo punto sappiamo di quanto bisogna modificare il peso di ogni carta, tenendo conto anche di altri modificatori riguardanti le caratteristiche della carta (ad esempio Magia, Arma, espansione della carta stessa, ecc.)

Rendere equo l'ambiente di gioco

Dopo il completamento di questa fase del bilanciamento, la probabilità di vittoria con tutte e nove le classi dovrebbe aggirarsi attorno al 50%. Ci sono stati, però, rari casi in cui quest'ultima non era ancora ideale dopo il bilanciamento. Questo può accadere se la probabilità di vittoria con una determinata classe è troppo distante dal 50% prima della modifica dei pesi; forse non raggiungeremo l'obiettivo iniziale in questi casi, ma il bilanciamento sarà comunque migliore rispetto a prima.

Grazie all'apprendimento automatico e al fatto che il sistema è in grado di utilizzare i dati dell'Arena tramite la matematica computazionale, è possibile determinare se una classe debba essere potenziata o indebolita e scegliere il peso ottimale per ogni carta di ciascuna classe.

ABunchOfKnobs_option05.jpg

Spero che questa sbirciata dietro le quinte del nostro sistema di modifiche minori al sistema delle Arene sia stata interessante! Vogliamo sapere cosa ne pensi, quindi facci sapere nei commenti se hai qualche domanda.

Articolo successivo
Heroes of the Storm
5h

Rissa tra Eroi della settimana, 18 gennaio 2019 - Arena: Giardini

Annientate i vostri avversari nella Rissa tra Eroi di questa settimana, Arena: Giardini!