lichess-org / lila

♞ lichess.org: the forever free, adless and open source chess server ♞
https://lichess.org
GNU Affero General Public License v3.0
15.53k stars 2.27k forks source link

Hyperbullet lag quota is high #12097

Open ddugovic opened 1 year ago

ddugovic commented 1 year ago

Some players would like hyperbullet lag compensation to be more similar to ultrabullet lag compensation: https://lichess.org/forum/lichess-feedback/stop-promoting-laggers--lag-cheaters-to-fast-game-controls#1

I propose simplifying scalachess code:

Centis(config.estimateTotalSeconds match {
  case i if i >= 180 => 100
  case i if i <= 15 => 20
  case i if i <= 30 => 35
  case i => i / 4 + 30
})

to simply MIN(100, config.estimateTotalSeconds/2 + 10), having this quota effect: 0.25+0: 20 -> 22.5 0.5+0: 35 -> 25 0+1: 45 -> 35 1+0: 45 -> 40 2+0: 60 -> 70 3+0: 100 (no change)

... or maybe MIN(100, config.estimateTotalSeconds/3 + 15) ? 0.25+0: 20 (no change) 0.5+0: 35 -> 25 0+1: 45 -> 28 1+0: 45 -> 35 2+0: 60 -> 55 3+0: 100 -> 75 4+0: 100 -> 95

ornicar commented 1 year ago
Clock.Config(LimitSeconds(15), IncrementSeconds(0)).estimateTotalSeconds == 15
MIN(100, 15/2 + 10) == 17

I'm not sure how you got 22.5?

ddugovic commented 1 year ago

Sorry, I computed that by hand; your math is accurate.

Now I iterate a bit, leaving out most esoteric TCs:

image Adding more formulas and more TCs clutters the graph, although better-fitting numbers could exist.

That "jump" in the blue series intersecting the orange series at (E=180s) is the popular 3+0 time control with hard-coded "quota=100". image

ornicar commented 1 year ago

https://github.com/lichess-org/scalachess/commit/d8bd015af7cb8e843e88aed70dbe9454ebe5a4fe thanks!

isaacl commented 1 week ago

The problem with this issue, and subsequent patch, is that, although not well documented, the lag comp thresholds were not chosen arbitrarily.

In particular, hyperbullet comp was chosen so that players from across the world could play hyperbullet on a level playing field. Ultrabullet was an exception, with a lower threshold to ensure more consistent game experience at the expense of worldwide level playing field.

Oceania home internet often has 300ms ping and with computer overhead that translates into a 350ms lag comp quota for them to play hyperbullet.

The lack of linearity in earlier graphs isn't that notable, there's no reason lag comp has to grow linearly with clock time... Altogether, I expect to revert https://github.com/lichess-org/scalachess/commit/d8bd015af7cb8e843e88aed70dbe9454ebe5a4fe and close this issue.

edited to remove comment about discretizing as I see that was done

isaacl commented 1 week ago

cc @lenguyenthanh

isaacl commented 1 week ago

If we want to keep this, we are making a decision to exclude certain parts of the world from a fair playing field on hyper, in order to provide more consistent experience for players with lower lag. That is something we can decide, but it should be an informed decision based on whether we want hyperbullet to be accessible everywhere or whether hyper be more restrictive and similar to ultra. The reason hyper was not given the same treatment as ultra is that 1) it's a more maintstream time control 2) It affects a players bullet rating. 3) High lag comp has less effect on 30s+0s vs 15s+0.

Note in the current lag implementation, the experience of two opponents is ALWAYS symmetric and ALWAYS based on the total lag between the two players, rather than their individual lag. When the TOTAL lag is high, there are more chances for premove and more time to think before opponent gets a chance to move. But again, it is always "fair" by being symmetric.

We should consider exposing this 'total' lag in UI to give players a heads up that they'll be playing a high lag game vs a low lag game, in case that affects their strategy.

ddugovic commented 1 week ago

Could we please document whatever we decide upon? I'll defer to your expertise here, however players may find compensation differences between 0+1, 0+2, 1/4+0, 1/2+0, 1/4+1, etc. time controls surprising.

isaacl commented 1 week ago

I actually don't think I'm the right person to make this decision, as I rarely play below 2+0, and more so it feels like a decision about how we want lichess to operate and what type of feedback we want to push back on.