From 526f4990b0f6a82c04c8c09037544f74ad6742c2 Mon Sep 17 00:00:00 2001 From: Theo Barollet Date: Wed, 14 Jun 2023 10:03:31 +0200 Subject: [PATCH] Convert pairing criteria to double instead of int --- .../jeudego/pairgoth/pairing/HistoryHelper.kt | 10 +++++----- .../jeudego/pairgoth/pairing/MacMahonSolver.kt | 16 ++++++++-------- .../org/jeudego/pairgoth/pairing/Solver.kt | 12 ++++++------ .../jeudego/pairgoth/pairing/SwissSolver.kt | 18 +++++++++--------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/HistoryHelper.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/HistoryHelper.kt index b99f9c1..f4aa60e 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/HistoryHelper.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/HistoryHelper.kt @@ -4,20 +4,20 @@ import org.jeudego.pairgoth.model.* open class HistoryHelper(protected val history: List, computeScore: () -> Map) { - fun getCriterionValue(p: Pairable, crit: PlacementCriterion): Int { + fun getCriterionValue(p: Pairable, crit: PlacementCriterion): Double { // Returns generic criterion // Specific criterion are computed by solvers directly return when (crit) { - PlacementCriterion.NULL -> 0 + PlacementCriterion.NULL -> 0.0 PlacementCriterion.CATEGORY -> TODO() - PlacementCriterion.RANK -> p.rank - PlacementCriterion.RATING -> p.rating + PlacementCriterion.RANK -> p.rank.toDouble() + PlacementCriterion.RATING -> p.rating.toDouble() PlacementCriterion.EXT -> TODO() PlacementCriterion.EXR -> TODO() PlacementCriterion.SDC -> TODO() PlacementCriterion.DC -> TODO() - else -> -1 + else -> -1.0 } } // Generic helper functions diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/MacMahonSolver.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/MacMahonSolver.kt index 435157a..1aca4d3 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/MacMahonSolver.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/MacMahonSolver.kt @@ -23,17 +23,17 @@ class MacMahonSolver(round: Int, history: List, pairables: List, TODO("Not yet implemented") } - override fun getSpecificCriterionValue(p: Pairable, criterion: PlacementCriterion): Int { + override fun getSpecificCriterionValue(p: Pairable, criterion: PlacementCriterion): Double { // TODO solve this double/int conflict return when (criterion) { PlacementCriterion.MMS -> TODO() - PlacementCriterion.SOSM -> p.sos.toInt() - PlacementCriterion.SOSMM1 -> p.sosm1.toInt() - PlacementCriterion.SOSMM2 -> p.sosm2.toInt() - PlacementCriterion.SODOSM -> p.sodos.toInt() - PlacementCriterion.SOSOSM -> p.sosos.toInt() - PlacementCriterion.CUSSM -> p.cums.toInt() - else -> -1 + PlacementCriterion.SOSM -> p.sos + PlacementCriterion.SOSMM1 -> p.sosm1 + PlacementCriterion.SOSMM2 -> p.sosm2 + PlacementCriterion.SODOSM -> p.sodos + PlacementCriterion.SOSOSM -> p.sosos + PlacementCriterion.CUSSM -> p.cums + else -> -1.0 } } diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/Solver.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/Solver.kt index d35fe3b..b65e41a 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/Solver.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/Solver.kt @@ -61,7 +61,7 @@ sealed class Solver( val criterionP = getCriterionValue(p, criterion) val criterionQ = getCriterionValue(q, criterion) if (criterionP != criterionQ) { - return criterionP - criterionQ + return (criterionP - criterionQ).toInt() } } return 0 @@ -83,20 +83,20 @@ sealed class Solver( // SOS and variants will be computed based on this score abstract fun computeStandingScore(): Map // This function needs to be overridden for criterion specific to the current pairing mode - open fun getSpecificCriterionValue(p1: Pairable, criterion: PlacementCriterion): Int { - return -1 + open fun getSpecificCriterionValue(p1: Pairable, criterion: PlacementCriterion): Double { + return -1.0 } - private fun getCriterionValue(p1: Pairable, criterion: PlacementCriterion): Int { + private fun getCriterionValue(p1: Pairable, criterion: PlacementCriterion): Double { val genericCritVal = historyHelper.getCriterionValue(p1, criterion) // If the value from the history helper is > 0 it means that it is a generic criterion // Just returns the value - if (genericCritVal != -1) { + if (genericCritVal < 0) { return genericCritVal } // Otherwise we have to delegate it to the solver val critVal = getSpecificCriterionValue(p1, criterion) - if (critVal == -1) throw Error("Couldn't compute criterion value") + if (critVal < 0) throw Error("Couldn't compute criterion value") return critVal } diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/SwissSolver.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/SwissSolver.kt index 539c158..61890c7 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/SwissSolver.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/pairing/SwissSolver.kt @@ -23,17 +23,17 @@ class SwissSolver(round: Int, return historyHelper.numberWins } - override fun getSpecificCriterionValue(p: Pairable, criterion: PlacementCriterion): Int { + override fun getSpecificCriterionValue(p: Pairable, criterion: PlacementCriterion): Double { // TODO solve this double/int conflict return when (criterion) { - PlacementCriterion.NBW -> p.nbW.toInt() - PlacementCriterion.SOSW -> p.sos.toInt() - PlacementCriterion.SOSWM1 -> p.sosm1.toInt() - PlacementCriterion.SOSWM2 -> p.sosm2.toInt() - PlacementCriterion.SODOSW -> p.sodos.toInt() - PlacementCriterion.SOSOSW -> p.sosos.toInt() - PlacementCriterion.CUSSW -> p.cums.toInt() - else -> -1 + PlacementCriterion.NBW -> p.nbW + PlacementCriterion.SOSW -> p.sos + PlacementCriterion.SOSWM1 -> p.sosm1 + PlacementCriterion.SOSWM2 -> p.sosm2 + PlacementCriterion.SODOSW -> p.sodos + PlacementCriterion.SOSOSW -> p.sosos + PlacementCriterion.CUSSW -> p.cums + else -> -1.0 } } }