Idea ==== Competative games develop "meta-games" when players develop certain strategies to beat other strategies. A healthy meta-game creates a large number of stable niches for players to fill, while an unhealthy meta might allow only 1 viable strategy. In reality, meta-games tend to shift quickly from archetype to archetype as players race to outwit one another. The analysis from a player perspective often amounts to little more than rock-paper-sissors. Strategy X beats strategy Y, and Strategy Y is popular, so I play strategy X. This tool is intended to "solve" the meta-game based on statistical observation of the matchups of all visible strategies. Framework ========= The fundamental assumption is that, in a stable meta game, all strategies have a 50% win rate. The density of each viable strategy is determined to comply with that constraint. Any strategy that is worse in every matchup than another strategy is not viable. The degenerate case occurs when one strategy dominates utterly, and only faces itself in a stable metagame. Format ====== Solver ------ Files read by the solver are in the format: First line contains a single int, equal to the number of strategies Followed by one line per strategy, containing only the name of the strategy Followed by a triangular array of data detailing the matchups between the strategies. The data takes the form of floating point numbers, seperated by spaces. The triangular array of data is organized such that if you built a spreadsheet with each of the strategies occupying a row and column, and you were to march through that spreadsheet from left to right, the top to bottom, starting after the cell in which the same strategy appears as row and column, the data would answer the question: "how often does the row strategy beat the column strategy". The lines in the data represent different rows in the spreadsheet. Calculator ---------- Additionally, there is a format read by the calculator. It is simply one line per game, with the two strategies seperated by a greater than or less than sign, indicating the winner. The calculator will generate output that can be read by the solver. Usage ===== The edit the hearthstone.log file with a record of your matches, and then simply make. Take a look at the makefile to adapt it to your purposes.