Initially I thought it would be fun to write a simulator which implemented all the rules of Blizzard’s excellent Hearthstone game, and allowed me to experiment with different types of strategies. But the more I work on this project the more I try to think about how others might use this app to enhance their Hearthstone experience.
Playing virtual games of various decks is interesting, and can help you tune a deck to perform better in actual games. But I have a feeling that many people don’t want to execute several runs of simulations and then try and compare the results, since this can be a tedious process with various levels of interpretation. The deck simulator is an experimental workbench for Hearthstone cards, after all.
However, I thought it would be nice if there was an easy way to grasp a deck’s strength, something which would allow a ballpark understanding of it with a single glance.
What I came up with is “HELO”, which stands for “Hearthstone Elo”, where “Elo” is the rating system commonly used in many competitive games, such as chess.
The actual algorithm and it’s analysis can get a bit complicated, but in a nutshell it works by maintaining a rating of strength which decreases when you loose and increase when you win. The amount of ratings adjustment is proportional to the rating of the opponent, and the number of games played by both also factors in.
Deck Simulator for Hearthstone manages this rating for each deck in the system, which is updated after each game and stored for later. The rating is displayed in three places:
- On the ‘Edit Decks’ screen (bottom right), where it is listed next to the total number of games played in parenthesis (Ex: 1568 (10000)).
- On the ‘Simulation’ screen’s game results, on the far left in brackets (Ex: )
- On the Participants detail window which appears when you click on a specific participant on the Simulation screen.
For all decks which come with the app when you download it I’ve already ran some simulations and generated their HELO score, and also configured things so they don’t change much. If you create a new deck it will start with a default rating of ‘1500’, and for the first few hundred games it can change greatly depending on how it performs in the simulator. The most important thing is not the number itself, but how it compares to the existing decks in the database.
One of the challenges with this feature is that the performance of a deck depends on not only the deck composition but also the strategy used by the AI player. I could have added separate ratings for each AI player as well and combined ratings, but to keep things simple I just have generated the existing ratings using only ‘Evl Planner (med)’, which is usually the strongest AI. You can use any AI you like, but for direct comparison you should use the same AI player to the extent possible. If you want to reset a deck’s rating you can simply copy that deck (use the green “Copy Deck” button on the “Edit Decks” screen) and it will start over at a rating of 1500 and 0 games. Another thing to keep in mind is that the rating is not reset when you modify a deck, so if you planning to make serious modifications to a deck you might want to copy it first you can compare the before and after, and have a proper rating for both.
An interesting thing about HELO is that sometimes it doesn’t match up with the overall win percentages of a simulation run (even if all the decks started fresh). The reason for this is that a higher win percentage (say, when comparing two decks) means “this deck won more overall games than this deck”, but a higher HELO means “this deck beat other decks with relatively higher ratings than this other deck”. So you can imagine a generalist deck that is designed to win as often as possible (versus any opponent), versus a specific counter deck targeting the stronger decks, and these would have different HELO vs win rates.
Please try out the latest version (1.2) on the Apple app store (link here) and let me know what you think of the rating system.
If you happen to find a deck over 1900 or so (the highest in the database at present), drop me a line as I’m curious to see it’s composition.