With a team elo system (current one or my new ones) you can calculate winning probabilities for 2 teams. But in a game with N teams (also if every team has only 1 player), what is the winning probability for any team if you only know the winning probabilities for all pairs of teams? I didn't have a solution to this problem for a long time, but now I do.
If I understand
SpringBattle.cs correctly, the current system treats (team) FFA as a 2 teams game where the winning team is against a team consisting of all other teams, which wouldn't be correct.
[Spoiler]I'm not entirely sure, because I don't understand all weighting formulas, though, because I don't know the global constants EloWeightMax and EloWeightMalusFactor. Knowing one of them would be enough for me to calculate the other one.
For calculating team FFA win probabilities I have a simple normed average calculation and a complicated expectation value calculation. Surprisingly they result in the same:
We want to calculate the probability that team number 0 wins. A team elo system gives us a (N-1)-dimensional probability vector p, where p_k is the probability that team 0 wins vs team k. I will use § instead of * for multiplication,
because star is bugged. Then the probability that team 0 wins the whole game is simply 2§||p||_1 /(N§(N-1)), where ||.||_1 is the 1-norm of a vector (sum of all components).
[Spoiler]The complicated formula is 2/(N§(N-1))§sum_(v in {0, 1}^(N-1))(||v||_1 §|product_from(k=1)to(N-1)(v_k+p_k-1)|, where {0, 1}^(N-1) is the (N-1)-dimensional binary vector space.
I have proven that giving every team an elo change proportional to the probability that the above formula suggests for the opposite of the real game outcome fullfills all conditions (sum over probabilities is 1; expectation value of elo change is 0 for each team; sum of all elo changes is 0 in any case so that the avg elo remains 1500).