5
0
mirror of https://github.com/AJMicke/KickerELO.git synced 2026-03-11 13:31:02 +01:00

Update 2 vs 2 Elo calculation

This commit is contained in:
Anton Micke
2025-03-24 15:25:45 +01:00
committed by AJMicke
parent 599baf8999
commit 6edc89ca7a

View File

@@ -39,10 +39,27 @@ public class EloCalculationService {
* @param toreVerlierer The number of goals of the losing teams
*/
public void updateElo2vs2(Spieler gewinnerVorn, Spieler gewinnerHinten, Spieler verliererVorn, Spieler verliererHinten, short toreVerlierer) {
gewinnerVorn.setElo2vs2(gewinnerVorn.getElo2vs2() + 10 - toreVerlierer);
gewinnerHinten.setElo2vs2(gewinnerHinten.getElo2vs2() + 10 - toreVerlierer);
verliererVorn.setElo2vs2(verliererVorn.getElo2vs2() - 10 + toreVerlierer);
verliererHinten.setElo2vs2(verliererHinten.getElo2vs2() - 10 + toreVerlierer);
final float baseK = 100;
final double adjustedK = baseK * (1 - (0.1 * toreVerlierer));
var totalWinnerElo = gewinnerVorn.getElo2vs2() + gewinnerHinten.getElo2vs2();
var totalLoserElo = verliererVorn.getElo2vs2() + verliererHinten.getElo2vs2();
var eloDifference = totalWinnerElo - totalLoserElo;
var winnerProbability = 1 / (1 + Math.pow(10, -eloDifference / 500));
var winner1Contribution = gewinnerVorn.getElo2vs2() / totalWinnerElo;
var winner2Contribution = gewinnerHinten.getElo2vs2() / totalWinnerElo;
var loser1Contribution = verliererVorn.getElo2vs2() / totalLoserElo;
var loser2Contribution = verliererHinten.getElo2vs2() / totalLoserElo;
var winner1EloChange = adjustedK * winner1Contribution * (1 - winnerProbability);
var winner2EloChange = adjustedK * winner2Contribution * (1 - winnerProbability);
var loser1EloChange = adjustedK * loser1Contribution * (0 - (1 - winnerProbability));
var loser2EloChange = adjustedK * loser2Contribution * (0 - (1 - winnerProbability));
gewinnerVorn.setElo2vs2((float) (gewinnerVorn.getElo2vs2() + winner1EloChange));
gewinnerHinten.setElo2vs2((float) (gewinnerHinten.getElo2vs2() + winner2EloChange));
verliererVorn.setElo2vs2((float) (verliererVorn.getElo2vs2() + loser1EloChange));
verliererHinten.setElo2vs2((float) (verliererHinten.getElo2vs2() + loser2EloChange));
}
public float getInitialElo1vs1() {