From 509297cc823d3bbbc0180420787e1a36edb5c1db Mon Sep 17 00:00:00 2001 From: Anton Micke Date: Fri, 11 Apr 2025 20:28:18 +0200 Subject: [PATCH] Clear up 1 vs 1 calculation formula --- .../kickerelo/service/EloCalculationService.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/kickerelo/kickerelo/service/EloCalculationService.java b/src/main/java/org/kickerelo/kickerelo/service/EloCalculationService.java index 90d530c..d462a0d 100644 --- a/src/main/java/org/kickerelo/kickerelo/service/EloCalculationService.java +++ b/src/main/java/org/kickerelo/kickerelo/service/EloCalculationService.java @@ -21,13 +21,13 @@ public class EloCalculationService { public void updateElo1vs1(Spieler gewinner, Spieler verlierer, short toreVerlierer) { final float baseK = 50; final float reductionPerGoal = 0.1f * baseK; - final float finalK = baseK - (reductionPerGoal * toreVerlierer); - float expectedScoreWinner = (float) (1 / (1 + Math.pow(10, (verlierer.getElo1vs1() - gewinner.getElo1vs1()) / 400))); - float expectedScoreLoser = (float) (1 / (1 + Math.pow(10, (gewinner.getElo1vs1() - verlierer.getElo1vs1()) / 400))); - gewinner.setElo1vs1(gewinner.getElo1vs1() + finalK * (1-expectedScoreWinner)); - verlierer.setElo1vs1(verlierer.getElo1vs1() - finalK * expectedScoreLoser); + double x = Math.pow(10, (verlierer.getElo1vs1() - gewinner.getElo1vs1()) / 400); + float eloChange = (float) (finalK * x / (x + 1)); + + gewinner.setElo1vs1(gewinner.getElo1vs1() + eloChange); + verlierer.setElo1vs1(verlierer.getElo1vs1() - eloChange); } /**