recomputing dudd when putting games
This commit is contained in:
@@ -57,6 +57,7 @@ object PairingHandler: PairgothApiHandler {
|
|||||||
val game = tournament.games(round)[payload.getInt("id")] ?: badRequest("invalid game id")
|
val game = tournament.games(round)[payload.getInt("id")] ?: badRequest("invalid game id")
|
||||||
game.black = payload.getID("b") ?: badRequest("missing black player id")
|
game.black = payload.getID("b") ?: badRequest("missing black player id")
|
||||||
game.white = payload.getID("w") ?: badRequest("missing white player id")
|
game.white = payload.getID("w") ?: badRequest("missing white player id")
|
||||||
|
tournament.recomputeDUDD(round, game.id)
|
||||||
if (payload.containsKey("h")) game.handicap = payload.getString("h")?.toIntOrNull() ?: badRequest("invalid handicap")
|
if (payload.containsKey("h")) game.handicap = payload.getString("h")?.toIntOrNull() ?: badRequest("invalid handicap")
|
||||||
tournament.dispatchEvent(gameUpdated, Json.Object("round" to round, "game" to game.toJson()))
|
tournament.dispatchEvent(gameUpdated, Json.Object("round" to round, "game" to game.toJson()))
|
||||||
return Json.Object("success" to true)
|
return Json.Object("success" to true)
|
||||||
|
@@ -4,6 +4,8 @@ import com.republicate.kson.Json
|
|||||||
import com.republicate.kson.toJsonArray
|
import com.republicate.kson.toJsonArray
|
||||||
import kotlinx.datetime.LocalDate
|
import kotlinx.datetime.LocalDate
|
||||||
import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest
|
import org.jeudego.pairgoth.api.ApiHandler.Companion.badRequest
|
||||||
|
import org.jeudego.pairgoth.pairing.solver.MacMahonSolver
|
||||||
|
import org.jeudego.pairgoth.pairing.solver.SwissSolver
|
||||||
import org.jeudego.pairgoth.store.Store
|
import org.jeudego.pairgoth.store.Store
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@@ -65,6 +67,22 @@ sealed class Tournament <P: Pairable>(
|
|||||||
if (round > games.size + 1) throw Error("invalid round")
|
if (round > games.size + 1) throw Error("invalid round")
|
||||||
else mutableMapOf<ID, Game>().also { games.add(it) }
|
else mutableMapOf<ID, Game>().also { games.add(it) }
|
||||||
fun lastRound() = games.size
|
fun lastRound() = games.size
|
||||||
|
|
||||||
|
fun recomputeDUDD(round: Int, gameID: ID) {
|
||||||
|
// Instantiate solver with game history
|
||||||
|
// TODO cleaner solver instantiation
|
||||||
|
val history = games.map { games -> games.values.toList() }
|
||||||
|
val solver = when (pairing.type) {
|
||||||
|
PairingType.SWISS -> SwissSolver(round, history, pairables.values.toList(), pairing.pairingParams, pairing.placementParams)
|
||||||
|
PairingType.MAC_MAHON -> MacMahonSolver(round, history, pairables.values.toList(), pairing.pairingParams, pairing.placementParams, mmBar = 3, mmFloor = -20)
|
||||||
|
else -> throw Exception("Invalid tournament type")
|
||||||
|
}
|
||||||
|
// Recomputes DUDD
|
||||||
|
val game = games(round)[gameID]!!
|
||||||
|
val whiteplayer = solver.pairables.find { p-> p.id == game.white }!!
|
||||||
|
val blackplayer = solver.pairables.find { p-> p.id == game.black }!!
|
||||||
|
game.drawnUpDown = solver.dudd(blackplayer, whiteplayer)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// standard tournament of individuals
|
// standard tournament of individuals
|
||||||
|
@@ -428,7 +428,12 @@ sealed class BaseSolver(
|
|||||||
val placementScoreRange = groupsCount
|
val placementScoreRange = groupsCount
|
||||||
|
|
||||||
//val geoMaxCost = avoidSameGeo
|
//val geoMaxCost = avoidSameGeo
|
||||||
val geoMaxCost = 100000000000.0
|
// TODO Fix import of avoidSameGeo in opengotha so this is not needed
|
||||||
|
val geoMaxCost = if (avoidSameGeo == 0.0) {
|
||||||
|
0.0
|
||||||
|
} else {
|
||||||
|
100000000000.0
|
||||||
|
}
|
||||||
|
|
||||||
val countryFactor = preferMMSDiffRatherThanSameCountry
|
val countryFactor = preferMMSDiffRatherThanSameCountry
|
||||||
val clubFactor: Int = preferMMSDiffRatherThanSameClub
|
val clubFactor: Int = preferMMSDiffRatherThanSameClub
|
||||||
@@ -533,9 +538,13 @@ sealed class BaseSolver(
|
|||||||
return scale * (1.0 - x) * (1.0 + k * x)
|
return scale * (1.0 - x) * (1.0 + k * x)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun dudd(black: Pairable, white: Pairable) : Int {
|
||||||
|
return white.group - black.group
|
||||||
|
}
|
||||||
|
|
||||||
open fun games(black: Pairable, white: Pairable): List<Game> {
|
open fun games(black: Pairable, white: Pairable): List<Game> {
|
||||||
// CB TODO team of individuals pairing
|
// CB TODO team of individuals pairing
|
||||||
|
|
||||||
return listOf(Game(id = Store.nextGameId, black = black.id, white = white.id, handicap = pairing.handicap.handicap(black, white), drawnUpDown = white.group-black.group))
|
return listOf(Game(id = Store.nextGameId, black = black.id, white = white.id, handicap = pairing.handicap.handicap(black, white), drawnUpDown = dudd(black, white)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user