From 55aad8c3fa546be994849b9c598b28970f8dfa26 Mon Sep 17 00:00:00 2001 From: Quentin Rendu Date: Sat, 25 May 2024 12:07:45 +0200 Subject: [PATCH] Update secondary weights to match OpenGotha v3.52 --- .../jeudego/pairgoth/pairing/solver/BaseSolver.kt | 14 +++++++++----- .../pairgoth/pairing/solver/MacMahonSolver.kt | 3 +-- 2 files changed, 10 insertions(+), 7 deletions(-) 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 a46e12a..2c33daf 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 @@ -423,10 +423,10 @@ sealed class BaseSolver( if (2*p1.nbW >= nbw2Threshold) playersMeetCriteria++ if (2*p2.nbW >= nbw2Threshold) playersMeetCriteria++ - return 0.5*playersMeetCriteria*pairing.geo.apply(p1, p2) + return pairing.geo.apply(p1, p2, playersMeetCriteria) } - fun GeographicalParams.apply(p1: Pairable, p2: Pairable): Double { + fun GeographicalParams.apply(p1: Pairable, p2: Pairable, playersMeetCriteria: Int): Double { val placementScoreRange = groupsCount val geoMaxCost = pairing.geo.avoidSameGeo @@ -478,11 +478,15 @@ sealed class BaseSolver( // The concavity function is applied to geoRatio to get geoCost val dbGeoCost: Double = concavityFunction(geoRatio, geoMaxCost) - var score = pairing.main.scoreWeight - dbGeoCost + var geoNominalCost = pairing.main.scoreWeight - dbGeoCost - score = min(score, geoMaxCost) + if (geoNominalCost > geoMaxCost) geoNominalCost = geoMaxCost - return score + return when (playersMeetCriteria) { + 2 -> geoMaxCost + 1 -> 0.5 * (geoNominalCost + geoMaxCost) + else -> geoNominalCost + } } // Handicap functions 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 eab364e..1c699b0 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 @@ -55,8 +55,7 @@ class MacMahonSolver(round: Int, || barThresholdActive && (p2.mms >= mmBar - Pairable.MIN_RANK) || p2.mms >= rankSecThreshold - Pairable.MIN_RANK) playersMeetCriteria++ - return if (playersMeetCriteria==2) 0.0 - else 0.5*(2-playersMeetCriteria)*pairing.geo.apply(p1, p2) + return pairing.geo.apply(p1, p2, playersMeetCriteria) } override fun HandicapParams.pseudoRank(pairable: Pairable): Int {