Topic-icon ELO & Poker

  • Maytsh
  • Maytsh's Avatar Topic Author
  • Visitor
  • Visitor
09 Feb 2012 00:56 - 09 Feb 2012 00:56 #8612 by Maytsh
Maytsh created the topic: ELO & Poker
I heard people talking in another thread about whether it might be a good idea to use an Elo-based system for Poker Heroes. Well, for what it's worth, I have been running a variation of an Elo-based league for about 5 years now (see here ), so here's a few thoughts:

The basics isn't actually all that bad - an easy way to model this would be to just see every game as 45 matches: the first-place player having won against all other players individually, the second having won against all but the first, etc..

So with Ri the old rating, we'd get something like

Ri' = Ri + C * ?j in {1..10}, j <> i (Dij - 1 / ( 1 + e(Rj - Ri) / E) )

for the new rating. With
  1. C an arbitrary constant regulating volatility (how fast players can gain/lose points). Probably around 5, so you can get 45 points per match maximum.
  2. Dij is 1 for i < j (the player won) and 0 for i > j (the player lost)
  3. E is the arbitrary score scaling, typically 400.

The trickier part about Elo is how to seed in new players and how to deal with inactivity. Here is what I have done in our league:
  1. We start all players at 0 points, but change the system so players can never actually fall below that value. This is done by applying another factor to all negative rating changes - it starts off as 0 at rating 0, and ramps up in a linear way until it reaches 1 at 300.

    This means that players initially are pretty well-protected against losing points, but gradually start to have to defend their points. It especially encourages you to play a good number of games in the beginning so you can learn the ropes (as far as the ranking system goes, you can only win at that point). I can't recommend it enough.
  2. Inactivity is a lot trickier to handle. It took me years to find a way that I was happy with. The obvious "let's hand out negative points when players don't play enough" doesn't really work once players start optimizing. But I suppose you can solve this as well by simply restarting the league every few months, so I won't go into details unless someone requests it.

I can write you some example code if you want.

Lastly on a somewhat personal note: Can we pretty please get division matches in the system somewhere? I'm actually not at all afraid of early all-in kids, but aggressive play is getting a bad rep because of them. Every time decent players remain it becomes insufferable slow-ball...

Please Log in or Create an account to join the conversation.

More
09 Feb 2012 08:22 #8614 by LuisCypher
LuisCypher replied.
Hello Maytsh,

thank you for your post.
But the most tricky part is, that elo was made for 1vs1 matches. But in poker you play 1vs9. That´s the tricky thing.

If you have any ideas and maybe formulas which we could test out we would be happy to work this out together with you!

We have currenty a system for the new ranking, which will be posted here soon. But we are always open for new ideas.

Best regards
The following user(s) said Thank You: Ghost__

Please Log in or Create an account to join the conversation.

  • Maytsh
  • Maytsh's Avatar Topic Author
  • Visitor
  • Visitor
09 Feb 2012 12:28 #8624 by Maytsh
Maytsh replied.
That's exactly the point I'm trying to address: I propose to just evaluate the 10vs10 as 45 separate 1vs1 (with lower factor so individual pairings don't stand out too much). That's obviously correct with respect to stability.

I have chalked up a quick reference implementation for the basic idea without any extensions here . It's in Haskell (that was quickest for me), but it's reasonably easy to translate to other languages.

Here's a few examples I ran through it - the first-placing player comes first in the list, returned are the points to grant/remove:
*Main> map round $ pointsNvsN [0,0,0,0,0,0,0,0,0,0]
[18,14,10,6,2,-2,-6,-10,-14,-18]
*Main> map round $ pointsNvsN [100,0,0,0,0,0,0,0,0,0]
[13,15,11,7,3,-1,-5,-9,-13,-17]
*Main> map round $ pointsNvsN [0,0,0,0,0,0,0,0,0,1000]
[20,16,12,8,4,0,-4,-8,-12,-36]
*Main> map round $ pointsNvsN [0,0,0,0,0,0,0,0,0,100]
[19,15,11,7,3,-1,-5,-9,-13,-23]
*Main> map round $ pointsNvsN [100,80,60,40,30,20,10,0,0,0]
[14,11,9,6,2,-1,-5,-8,-12,-16]
*Main> map round $ pointsNvsN [800,500,300,200,200,100,100,80,60,0]
[1,3,6,6,2,3,-1,-4,-7,-9]
*Main> map round $ pointsNvsN [500,800,300,200,200,100,100,80,60,0]
[7,-3,6,6,2,3,-1,-4,-7,-9]
*Main> map round $ pointsNvsN [500,300,300,800,200,100,100,80,60,0]
[7,10,6,-11,3,3,-1,-4,-7,-9]

There's even flexibility in there to improve things further - for example, one could argue that having someone place 4th can't really be seen as a win against someone else finishing 5th. This could be "fixed" by changing D (or "result" in the implementation) so this is seen more like a "draw", f.e. D_45 = 0.5.

The biggest disadvantage of Elo-derived systems is that they are really hard to understand as well as explain to players. You pretty much have to bank on the numbers being so obviously fair that nobody is going to question them. I wouldn't blame you for not adopting it for that reason alone.

Please Log in or Create an account to join the conversation.

More
09 Feb 2012 12:55 #8625 by LuisCypher
LuisCypher replied.
Just reading the esl elo description. At least i can follow you now ;)... We will make some test calculations and be back to you asap.

best regards
The following user(s) said Thank You: Ghost__

Please Log in or Create an account to join the conversation.

  • Maytsh
  • Maytsh's Avatar Topic Author
  • Visitor
  • Visitor
10 Feb 2012 01:39 #8649 by Maytsh
Maytsh replied.
Hm, after some consideration I'm not convinced anymore that the 4th vs. 5th argument really holds much water. There is an asymmetry in here, but I think it would be more defensible to simply argue that the last player was simply in the game shorter - therefore he had fewer hands to show his skill (or lack thereof). Admittedly blinds already work in a similar way, but I think it's still worth considering how to reflect that.

So the idea would be to weight the sub-matches by an approximation of their length. Let's suppose a distribution of [1,1,1/2,...,1/9] - meaning we expect the first two players to have been present for the full game (obviously), the 3th player having been eliminated half way through, and the 10th player having been present for only 1/9th of the hands.

Now one would multiply that weight - let's call it Wij - on every sum entry, so we get

Ri' = Ri + C * ?j in {1..10}, j <> i Wij * (Dij - 1 / ( 1 + e(Rj - Ri) / E) )

So what does that mean? The system is still stable as long as Wij=Wji. In practical terms, however, this will but a lot of weight on the heads-up. With a sufficient radical weight distribution, a dominant player might actually lose less by busting out early than by losing the heads-up. Luckily, this isn't the case with the distribution
I proposed above:
*Main> map round $ pointsFree [0,0,0,0,0,0,0,0,0,1000]
[20,10,5,2,-1,-3,-4,-6,-7,-18]
*Main> map round $ pointsFree [0,0,0,0,0,0,0,1000,0,0]
[21,11,6,2,0,-2,-4,-17,-7,-8]
*Main> map round $ pointsFree [0,0,0,0,0,1000,0,0,0,0]
[21,11,6,3,0,-17,-4,-5,-7,-8]
*Main> map round $ pointsFree [0,0,0,1000,0,0,0,0,0,0]
[22,12,7,-15,0,-2,-4,-5,-7,-8]
*Main> map round $ pointsFree [0,0,1000,0,0,0,0,0,0,0]
[23,13,-13,3,0,-2,-4,-5,-7,-8]
*Main> map round $ pointsFree [0,1000,0,0,0,0,0,0,0,0]
[24,-10,8,3,0,-2,-4,-5,-7,-8]
*Main> map round $ pointsFree [1000,0,0,0,0,0,0,0,0,0]
[0,14,8,3,0,-2,-4,-5,-7,-8]

Note however that the eventual winner "profits" from playing longer against the dominant player. Also note that with 1000 points it's kind of hard to get any points at all against a vastly inferior field...

I have updated my implementation with the above weighting as well as the seed bonus that I described it earlier. Sorry for the spam, just brain-dumping a bit here. No pressure ;)

Please Log in or Create an account to join the conversation.

More
10 Feb 2012 09:20 - 10 Feb 2012 09:21 #8653 by LuisCypher
LuisCypher replied.
Could you make an example with 10 players:
Player 1 - 1000 Elo Points
Player 2 - 1200 Elo Points
Player 3 - 1100 Elo Points
Player 4 - 1050 Elo Points
Player 5 - 920 Elo Points
Player 6 - 980 Elo Points
Player 7 - 1310 Elo Points
Player 8 - 1023 Elo Points
Player 9 - 1211 Elo Points
Player 10 - 1289 Elo Points

Let them play 3 rounds of poker. You can decide with which results, but based on your current idea. Then please post the rounds with old and new scores of these 10 players. We wouldn´t change the score for this.

So scores for the 1vs1s would be given based on the results of every round of poker (old point system):
1. 24
2. 16
3. 10
4. 6
5. 3
6. 2
7. 1
8. 0
9. 0
10. 0

By taking the given scores from this table you can calculate the 1vs1s an accumulate the final given scores for each round.

Hope you can follow me. During the next days we are busy with the cup and the reset, but we will be on this task asap. And maybe a living example invites also the others into the discussion. Thankyou in advance!
The following user(s) said Thank You: Ghost__

Please Log in or Create an account to join the conversation.

Champions of

PokerTH - live

The PokerTH spectator tool.

Member Login

 advert
NOTE! This site uses cookies and similar technologies.
Cookies make it easier for us to provide you with our services. With the usage of our services you permit us to use cookies.
More information

We use cookies to personalize content and ads to offer features for social media and analyze the number of hits on our website. We also provide information about your use of our website to our partner for social media, advertising and analysis on.
http://www.google.com/intl/de/policies/privacy/partners/