diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairable.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairable.kt index bee62a4..43356e2 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairable.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairable.kt @@ -9,7 +9,7 @@ import org.jeudego.pairgoth.store.Store sealed class Pairable(val id: ID, val name: String, open val rating: Int, open val rank: Int) { companion object { val MIN_RANK: Int = -30 // 30k - val MAX_RANK: Int = 20 + val MAX_RANK: Int = 8 // 9D } abstract fun toJson(): Json.Object abstract val club: String? diff --git a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairing.kt b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairing.kt index 08e5208..4de0168 100644 --- a/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairing.kt +++ b/api-webapp/src/main/kotlin/org/jeudego/pairgoth/model/Pairing.kt @@ -181,8 +181,8 @@ class MacMahon( placementParams: PlacementParams = PlacementParams( Criterion.NBW, Criterion.SOSW, Criterion.SOSOSW ), - var mmFloor: Int = -20, - var mmBar: Int = 0 + var mmFloor: Int = -20, // 20k + var mmBar: Int = 0 // 1D ): Pairing(MAC_MAHON, pairingParams, placementParams) { companion object {} override fun pair(tournament: Tournament<*>, round: Int, pairables: List): List { 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 6fa67d6..b0053d5 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 @@ -236,8 +236,7 @@ sealed class BaseSolver( open fun MainCritParams.minimizeScoreDifference(p1: Pairable, p2: Pairable): Double { var score = 0.0 val scoreRange: Int = groupsCount - // TODO check category equality if category are used in SwissCat - if (scoreRange!=0){ + if (scoreRange != 0){ val x = abs(p1.group - p2.group).toDouble() / scoreRange.toDouble() score = concavityFunction(x, scoreWeight) } 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 aab764b..4061ff4 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 @@ -13,17 +13,18 @@ class MacMahonSolver(round: Int, BaseSolver(round, history, pairables, pairingParams, placementParams) { override val scores: Map by lazy { - historyHelper.wins.mapValues { - pairablesMap[it.key]!!.let { pairable -> - pairable.mmBase + pairable.nbW - } - } + pairablesMap.mapValues { it.value.let { + pairable -> pairable.mmBase + pairable.nbW // TODO take tournament parameter into account + } } } + val Pairable.mmBase: Double get() = min(max(rank, mmFloor), mmBar) + mmsZero val Pairable.mms: Double get() = scores[id] ?: 0.0 // CB TODO - configurable criteria - override val mainLimits get() = Pair(mmFloor.toDouble(), 100.0) // TODO ? + val mainScoreMin = mmFloor + PLA_SMMS_SCORE_MIN - Pairable.MIN_RANK + val mainScoreMax = mmBar + PLA_SMMS_SCORE_MAX + (round-1) - Pairable.MIN_RANK // round number starts at 1 + override val mainLimits get() = Pair(mainScoreMin.toDouble(), mainScoreMax.toDouble()) override fun evalCriterion(pairable: Pairable, criterion: Criterion) = when (criterion) { Criterion.MMS -> pairable.mms Criterion.SOSM -> pairable.sos @@ -35,6 +36,8 @@ class MacMahonSolver(round: Int, companion object { const val mmsZero = 30.0 + const val PLA_SMMS_SCORE_MAX = 2 // TODO move this into placement criteria + const val PLA_SMMS_SCORE_MIN = -1 } }