From 27e6f7f14da1acf692726cecc72793260dfffc95 Mon Sep 17 00:00:00 2001 From: Quentin Rendu Date: Wed, 29 May 2024 17:55:39 +0200 Subject: [PATCH] Use MMS to choose ByePlayer if Mac-Mahon tournament --- .../org/jeudego/pairgoth/pairing/solver/BaseSolver.kt | 6 +++++- .../org/jeudego/pairgoth/pairing/solver/MacMahonSolver.kt | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/BaseSolver.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/BaseSolver.kt index 0b55f93..db55e3d 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/BaseSolver.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/BaseSolver.kt @@ -52,6 +52,10 @@ sealed class BaseSolver( // pairing.base.applyByeWeight(p1, p2) + pairing.handicap.color(p1, p2) + open fun computeWeightForBye(p: Pairable): Double{ + return p.rank + 2*(p.main+p.rank) + } + fun pair(): List { // check that at this stage, we have an even number of pairables // The BYE player should have been added beforehand to make a number of pairables even. @@ -75,7 +79,7 @@ sealed class BaseSolver( var weightForBye : Double var byePlayerIndex = 0 for (p in nameSortedPairables){ - weightForBye = p.rank + 2*(p.main + p.rank) + weightForBye = computeWeightForBye(p) if (p.id in historyHelper.byePlayers) weightForBye += 1000 if (weightForBye <= minWeight){ minWeight = weightForBye diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/MacMahonSolver.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/MacMahonSolver.kt index 29fa7dc..04566ba 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/MacMahonSolver.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/solver/MacMahonSolver.kt @@ -33,6 +33,10 @@ class MacMahonSolver(round: Int, } } + override fun computeWeightForBye(p: Pairable): Double{ + return 2*scores[p.id]!!.second + } + override fun SecondaryCritParams.apply(p1: Pairable, p2: Pairable): Double { // playersMeetCriteria = 0 : No player is above thresholds -> apply the full weight