gameServer/OfficialServer/Glicko2.hs
changeset 11390 36e1bbb6ecea
parent 11381 437a60995fe1
equal deleted inserted replaced
11389:c93f204a5a00 11390:36e1bbb6ecea
    13         opponentRating :: RatingData,
    13         opponentRating :: RatingData,
    14         gameScore :: Double
    14         gameScore :: Double
    15     }
    15     }
    16 
    16 
    17 τ, ε :: Double
    17 τ, ε :: Double
    18 τ = 0.3
    18 τ = 0.2
    19 ε = 0.000001
    19 ε = 0.000001
    20 
    20 
    21 g_φ :: Double -> Double
    21 g_φ :: Double -> Double
    22 g_φ φ = 1 / sqrt (1 + 3 * φ^2 / pi^2)
    22 g_φ φ = 1 / sqrt (1 + 3 * φ^2 / pi^2)
    23 
    23 
    33         μᵢ = (ratingValue oppRating - 1500) / 173.7178
    33         μᵢ = (ratingValue oppRating - 1500) / 173.7178
    34         φᵢ = rD oppRating / 173.7178
    34         φᵢ = rD oppRating / 173.7178
    35         g_φᵢ = g_φ φᵢ
    35         g_φᵢ = g_φ φᵢ
    36 
    36 
    37 
    37 
    38 calcNewRating :: RatingData -> [GameData] -> RatingData
    38 calcNewRating :: RatingData -> [GameData] -> (Int, RatingData)
    39 calcNewRating oldRating [] = RatingData (ratingValue oldRating) (173.7178 * sqrt (φ ^ 2 + σ ^ 2)) σ
    39 calcNewRating oldRating [] = (0, RatingData (ratingValue oldRating) (173.7178 * sqrt (φ ^ 2 + σ ^ 2)) σ)
    40     where
    40     where
    41         φ = rD oldRating / 173.7178
    41         φ = rD oldRating / 173.7178
    42         σ = volatility oldRating
    42         σ = volatility oldRating
    43 
    43 
    44 calcNewRating oldRating games = RatingData (173.7178 * μ' + 1500) (173.7178 * sqrt φ'sqr) σ'
    44 calcNewRating oldRating games = (length games, RatingData (173.7178 * μ' + 1500) (173.7178 * sqrt φ'sqr) σ')
    45     where
    45     where
    46         _Es = map (calcE oldRating) games
    46         _Es = map (calcE oldRating) games
    47         υ = 1 / sum (map υ_p _Es)
    47         υ = 1 / sum (map υ_p _Es)
    48         υ_p (_Eᵢ, g_φᵢ, _) = g_φᵢ ^ 2 * _Eᵢ * (1 - _Eᵢ)
    48         υ_p (_Eᵢ, g_φᵢ, _) = g_φᵢ ^ 2 * _Eᵢ * (1 - _Eᵢ)
    49         _Δ = υ * part1
    49         _Δ = υ * part1