I’m not sure what’s happened, but it looks like it’s giving BBB’s win probability.
I was chatting with mastrblastr. I like his idea of reporting two numbers. The first is ‘mu sum’ the second is ‘mu sum vs the top 6 characters’ (ranked by normal mu sum). This works well for a lot of games.
In general, I think mu sum works a lot better than NE methods. If a character has a good mu sum there is probably a reason. They do powerful things. Maybe they have some unfortunate mus but they are well-tuned.
Ok, so, I botched more than one thing.
Despite triple-checking the randomization, I still messed up the way to compute whether a game was a win or a loss and I basically inverted the results. In hindsight, this was obvious since the percents I was getting where complementary to Troq’s.
On the other hand, if anything, the new simulations validate my math, so I’m 100% sure the step is computed correctly.
I also have one more errata corrige on what I said: yeah, OF COURSE the mixed strategy works worse than the pure strategy. I don’t exactly know what I was thinking of when I said that, but the reason is mathematically quite obvious. Your objective is maximizing the function Ma*b where a is the step0 distribution and b is the strategy. We have no control over M or a, and the only way to maximize the product is by maximizing the value of b at the index where Ma is largest, which, of course, means making a null vector with 1 at the best index.
If we make the assumption that characters are played in proportion to their power (apriori winning probability), you can still compute the eigenvector solution and get a steady-state solution (i.e. a stable meta that won’t change as tournaments go on), although that’s only theoretically interesting and not useful in the least (unless you want to invest on learning a character that will become relevant in a couple of years, but eh).
Now, all that’s left is finding a quick way to compute BO5 strategies. I’m pretty sure I can manage programming it.
@deluks917 the MU sum idea is a good concept, overall, since it doesn’t need any historical data (aside from the MU chart). On the other hand, it looks like a first-order approximation of the eigenvector method, so it should yield similar resulta (the eigenvector method has more or less the same characters that are considered top tier listed as more popular, so it should work the same). I can definitely try out your approach and add it to the sheets, though.
Maybe a 2-D tier plot, then, similar to this? But with average matchup against top quartile, instead of matchup variance, for the horizontal axis.
Updates: I should have gotten matches with counterpicks right. I don’t have any way to validate my numbers with validations, but the code I use for BO3 and BO5 works for BO1 and also works with a toy dataset I built for which I could compute manually both BO3 and BO5.
I computed BO3 and BO5 (and I’m waiting for the results of BO7, which is taking 200 times longer than it should because I’m computing the MU chart, and 200 times a lot of time for a single MU is a lot of time. I also forgot to implement a progress tracker that tells me how far into the calculation the code is, so eh). I would have loved to implement the calculations on Sheets (in order to be able to change the results dynamically), but that’s not too practical to do (requires a huge amount of sheets).
I added them to the sheets file (under the sheets BO3 and BO5), where there’s an adjusted MU chart (i.e. what will your probability of winning if you picked a certain character and the opponent played another certain character?) and an apriori probability of winning given the distribution your opponent is using to pick the first character. You can compute the eigenvector solution to this, too, using the adjusted MU chart instead of the current MU chart, but I don’t think it’d be a very interesting thing to factor in.
I do have a function (in Python) that tells you the best counterpick depending on the current scores for each player, but that’s not feasible to implement in sheets.
I might make a colab (interactive python document that can be run on the browser) with all the data in the future, so that you get the computing power of python, a decent presentation of the data (with explanations for each step written out) and interactivity if you want to edit your own MU chart in or compute on the fly the best counterpick.
I think the BoN computations should be sheets-computable using a dynamic-programming type strategy, actually. For any matchup A vs B, the recursion ends up being
BO(A,B,X,Y) = MU(A,B) * MIN(BO(A, *, X-1, Y)) + (1-MU(A,B))*MAX(BO(*, B, X, Y-1)). Each level only depends on the two levels below it, so you end up computing from the bottom up.
I haven’t bothered, honestly, to try it in Sheets since I had to stop the BO7 computation in Python after some time it ran because it took way too long.
The problem was, of course, that in deep trees (which is the case for a BO7), a lot of states (i.e. character you want to counterpick optimally, number of wins you need to win the match, number of wins the opponent needs to win the match) are repeated, and even vectorializing the math as much as possible was very inefficient. After switching to a method that saved the states and their results to speed up recursion the computation for BO7 finished ~1 second.
The closest thing in Sheets would be to write an AppScript that auto-creates a sheet for each score state (2-1, 1-1, 2-0, etc…) and saves the MUC for that specific score over there.
Also, I’ve already started the colaboratory: that lets me show stuff more freely than excel and also add extensive comments to what we are doing, so that you don’t need to reference this thread to understand the data you are looking at.
Yeah, that was what I meant by using a dynamic programming approach (well, effectively the same). Computing from the bottom up, and saving all the lower level calculations, like you found.
Turns out, it is pretty annoying in sheets.
By the way, I’m done with my first revision of the colab notebook. Warning, it’s a LONG document.
You can find it at this link. Note that by default you are in playground mode, which means you can do any change you want to the file if you want to play around with anything, and it will be back to normal once you close your tab.