- # raw ping ratios
- ping_ratio_i = self.pingfactor(pi, pj)
- ping_ratio_j = self.pingfactor(pj, pi)
-
- if ping_ratio_i > 0.5:
- if scorefactor_real > 0.5:
- log.debug("player i has the ping disadvantage and won")
- pingfactor_i = 1 + ping_ratio_i * ep.latency_trend_factor
- pingfactor_j = 1 + ping_ratio_j * ep.latency_trend_factor
- else:
- log.debug("player i has the ping disadvantage and lost")
- pingfactor_i = 1 - ping_ratio_i * ep.latency_trend_factor
- pingfactor_j = 1 - ping_ratio_j * ep.latency_trend_factor
-
- elif ping_ratio_i < 0.5:
- if scorefactor_real > 0.5:
- log.debug("player j has the ping disadvantage and lost")
- pingfactor_i = 1 - ping_ratio_i * ep.latency_trend_factor
- pingfactor_j = 1 - ping_ratio_j * ep.latency_trend_factor
- else:
- log.debug("player j has the ping disadvantage and won")
- pingfactor_i = 1 + ping_ratio_i * ep.latency_trend_factor
- pingfactor_j = 1 + ping_ratio_j * ep.latency_trend_factor
- else:
- log.debug("the pings are equal")
- pingfactor_i = pingfactor_j = 1
+ # adjust the elo prediction according to ping
+ ping_ratio = self.pingfactor(pi, pj)
+ scorefactor_ping = ep.latency_trend_factor * (0.5 - ping_ratio)
+ scorefactor_elo_adjusted = max(0, min(1, scorefactor_elo + scorefactor_ping))