Open Side Menu Go to the Top
Register
New algorithm to calculate ICM for large tournaments New algorithm to calculate ICM for large tournaments

04-14-2014 , 05:00 AM
^

The 20 player version is still in the "old content" section:
http://www.holdemresources.net/hr/sn...alculator.html
New algorithm to calculate ICM for large tournaments Quote
08-02-2015 , 03:22 AM
Quote:
Originally Posted by trojanrabbit
The error will be proportional to 1/sqrt(iterations)
Is a proof of this available?
New algorithm to calculate ICM for large tournaments Quote
08-06-2015 , 03:01 PM
Very nice work op.
New algorithm to calculate ICM for large tournaments Quote
07-27-2018 , 08:02 AM
Bump. I've found Tysen's algorithm to be extremely useful for validating new approaches, thanks again for sharing this!

I've made a free version for ICM calculations with up to 256 players available here, some details on the accuracy can be found here.
New algorithm to calculate ICM for large tournaments Quote
07-27-2018 , 11:40 AM
Good work, plexiq and great to see you giving Tysen credit on HRC
New algorithm to calculate ICM for large tournaments Quote
07-27-2018 , 09:23 PM
New algorithm to calculate ICM for large tournaments Quote
11-07-2018 , 08:09 AM
Imagine the following scenario:
-You estimate the EV of a given player
-You remove him from the tournament and pay him his EV from the prizepool

How would you go about adjusting the distribution of prizes in the remaining prizepool such that the EV of all remaining players is unchanged (make everyone indifferent between the given player being removed and given his EV, and not)?
New algorithm to calculate ICM for large tournaments Quote
11-07-2018 , 12:31 PM
Have not given this much thought, but in general, it is not possible for remaining players to have the same EV. Assuming you are using ICM, suppose the chip lead of the top player is so large that all remaining players have negative EV. Removing him would then give at least one other player positive EV making the required condition unattainable.

And if the removed player has negative EV, how is that handled?
New algorithm to calculate ICM for large tournaments Quote
11-07-2018 , 02:13 PM
I meant EV measured in equity in the prizepool (so excluding buy in), which is >=0.
I tried some example using a rule of reducing money from each prize proportionally to the probability of the removed player finishing in that position. I also tried proportionally to probability of finishing in that position or higher.
Both approaches didn't work, the EV of the other players changed.

Example:

https://imgur.com/AUlJMEI

stacks payout_structure EVs
1000 50 13.3263
2000 30 23.59562
3000 20 29.48196
4000 33.59612



removing player with 3k stack and giving him 29.48 (from each prize, proportionally to probability fo finishing in that position or higher)

https://imgur.com/jLAA021

stacks payout_structure EVs
1000 45.08387524 14.94361637
2000 19.34839636 22.90788235
4000 6.085768401 32.66654129


The EV of the players with 2k and 4k stacks decreased and it went to the 1k stack player

Last edited by ILiKePaStA; 11-07-2018 at 02:30 PM.
New algorithm to calculate ICM for large tournaments Quote
11-07-2018 , 03:28 PM
Not really sure what the point is, but you could try and redistribute the removed players stack to the remaining players according to ICM.

The payout structure needs to have the place paid to the removed player also removed from the payout ladder, and there will be a bigger jump in payout just above there as a result.

If you mean pay off and remove a player from before the money bubble, idk how that would work, or why that is even interesting.
New algorithm to calculate ICM for large tournaments Quote
11-08-2018 , 05:47 AM
The goal is to find a solution to the problem of 'cashing out' from an MTT. Finding a set of rules that allows a player to leave the MTT taking his EV (according to ICM) from the prizepool and leaving everyone else's EV unchanged.
Instead of everyone having to agree to make a deal a player could unilaterally do so and not affect other players.
For now I'm not accounting for skill differentials (could be introduced later, after finding a solution to the base problem).

It's possible the solution is different depending on whether this happens before or after the money bubble.

I was initially thinking only about adjusting prizepool, but adjusting chipstacks of other players (as robert_utk suggested) could be viable too.
New algorithm to calculate ICM for large tournaments Quote
11-08-2018 , 11:30 AM
This looks like a reasonable first approximation:
s_i: The original payout structure with the i'th place removed (lower places move up)
p_i: The probability of the cashed-out player to finish in ith position in the original setup
adjusted_prizes = weighted sum of s_i * p_i

Going with your example:
Code:
Original prizes:
  [0.5, 0.3, 0.2, 0.0]
Original equities by stack: 
   4000 0.33603
   3000 0.29488
   2000 0.23587
   1000 0.13321
==================
Cashing out player with 4000 chips.
Finishing probabilities with 4000 chips:
  [0.40000, 0.31587, 0.20635, 0.07778]
Adjusted prizes:
  [0.42000, 0.22841, 0.01556]
New equities by stack [change in brackets]:
   4000 0.33603 [cashed]
   3000 0.29228 [-0.88%]
   2000 0.23551 [-0.15%]
   1000 0.13618 [+2.22%]
==================
Cashing out player with 3000 chips.
Finishing probabilities with 3000 chips:
  [0.30000, 0.30833, 0.26190, 0.12976]
Adjusted prizes:
  [0.44000, 0.23917, 0.02595]
New equities by stack [change in brackets]:
   4000 0.33159 [-1.32%]
   3000 0.29488 [cashed]
   2000 0.23563 [-0.10%]
   1000 0.13790 [+3.52%]
==================
Cashing out player with 2000 chips.
Finishing probabilities with 2000 chips:
  [0.20000, 0.24127, 0.31746, 0.24127]
Adjusted prizes:
  [0.46000, 0.25587, 0.04825]
New equities by stack [change in brackets]:
   4000 0.33124 [-1.43%]
   3000 0.29164 [-1.10%]
   2000 0.23587 [cashed]
   1000 0.14125 [+6.03%]
==================
Cashing out player with 1000 chips.
Finishing probabilities with 1000 chips:
  [0.10000, 0.13452, 0.21429, 0.55119]
Adjusted prizes:
  [0.48000, 0.27655, 0.11024]
New equities by stack [change in brackets]:
   4000 0.33265 [-1.01%]
   3000 0.29368 [-0.41%]
   2000 0.24045 [+1.94%]
   1000 0.13321 [cashed]
New algorithm to calculate ICM for large tournaments Quote
11-08-2018 , 12:25 PM
Just spitballin....

There will be a tiny problem for the last place ITM player. This player can only be hurt when players above him are ‘allowed’ to cash out. Last place player can shove any two cards and be better off than accepting a deal, and would always be offered a slight premium to quit early.
New algorithm to calculate ICM for large tournaments Quote
11-09-2018 , 12:06 PM
Good suggestion plexiq.
I did a couple more example using the rules you described (both times removing the player with 5k chips).

Seems to be a decent approximation when before the money bubble:
Code:
   stacks  payout_structure    EVs_b4  new_payouts    EVs_aft  EV_pct_diff
0    1000              50.0   2.45323     44.44340   2.501643     0.019734
1    2000              30.0   4.85374     26.51823   4.929641     0.015638
2    3000              20.0   7.15440     17.57464   7.246006     0.012804
3    4000               NaN   9.38060      0.00000   9.445441     0.006912
4    5000               NaN  11.46373      0.00000  11.463730     0.000000
5    6000               NaN  13.43681      0.00000  13.490070     0.003964
6    7000               NaN  15.32918      0.00000  15.300178    -0.001892
7    8000               NaN  17.10230      0.00000  17.014084    -0.005158
8    9000               NaN  18.82601      0.00000  18.609207    -0.011516
However needs an adjustment for when in the money (since we're removing 100% of the bottom prize we need to remove less from the prizes above):
Code:
 stacks  payout_structure     EVs_b4  new_payouts    EVs_aft  EV_pct_diff
0    1000                35   6.941655    30.118830   6.325151    -0.088812
1    2000                20   8.757740    17.128760   8.228635    -0.060416
2    3000                15  10.492670    12.795345   9.965366    -0.050255
3    4000                10  12.076200     8.503520  11.532887    -0.044990
4    5000                 5  13.555300     4.511115  13.555300     0.000000
5    6000                 5  14.872035     4.320615  14.123282    -0.050346
6    7000                 5  16.098530     4.255475  15.229459    -0.053985
7    8000                 5  17.205870     0.000000  16.228882    -0.056782
I'm gonna have a look now how to adjust for when ITM and try some more examples.
Then can try out some variations to get closer to the exact solution.

Thx for the cooperation!
New algorithm to calculate ICM for large tournaments Quote
11-09-2018 , 12:29 PM
^ In the money you could simply subtract the lowest prize from all spots, run the approximation with that modified pool (last spot is now 0), then add that last prize to all prizes and the cashout.
New algorithm to calculate ICM for large tournaments Quote
11-09-2018 , 01:28 PM
Quote:
Originally Posted by plexiq
^ In the money you could simply subtract the lowest prize from all spots, run the approximation with that modified pool (last spot is now 0), then add that last prize to all prizes and the cashout.
Confirmed

Code:
   stacks  payout_structure     EVs_b4  new_payouts    EVs_aft  EV_pct_diff
0    1000                35   6.950945    30.836180   7.034685     0.012047
1    2000                20   8.775210    17.856365   8.918105     0.016284
2    3000                15  10.490795    13.525220  10.651552     0.015324
3    4000                10  12.074280     9.249045  12.198686     0.010303
4    5000                 5  13.533190     5.000000  13.533190     0.000000
5    6000                 5  14.862660     5.000000  14.820105    -0.002863
6    7000                 5  16.100555     5.000000  15.915083    -0.011520
7    8000                 5  17.212365     0.000000  16.928594    -0.016486
New algorithm to calculate ICM for large tournaments Quote
06-27-2019 , 11:26 AM
Quote:
Originally Posted by trojanrabbit
I think I’ve discovered a new algorithm to accurately calculate ICM equities for large numbers of people. I’ve done some searching and wasn’t able to find any evidence that this has been used before, so I think I’m the first. If someone else has come up with this before, then my apologies…

First, why is this important? Traditional ICM calculations require you to do a number of calculations proportional to the factorial (n!) of the number of players remaining in a tournament. This is why you never see ICM calculators that can handle more than 10 players – it can take hours to calculate for 15 people and days to years to calculate more than that. My new algorithm can produce very accurate numbers in less than a minute, even if you have over 50 players.

Software developers may find this useful and do what was previously considered impossible, perhaps incorporating some concepts around the bubble factor from Kill Everyone. I will personally be doing some research of my own now that this door is opened.

This algorithm works on the principle of ICM where you imagine that all of the chips in the tournament are randomly given numbers and each player’s place in the tournament is based on their highest scoring chip. However we can use some math tricks to make the calculations easier. If each chip is given a random number between 0 and 1, and we have n chips, then the probability that all of our chips will score x or less will be x^n. We can also scale things so that we can work with smaller stacks since fractional chips are okay in this formula. This has the advantage that we only have to generate 1 random number for each player rather than 1 number for each chip.

Here is the algorithm:

Given n players
Given stack sizes S = S1, S2, … Sn
Given prizes Z = Z1, Z2, … Zn
Get normalized stack sizes Q = Q1, Q2, …Qn by dividing S by average stack

Simulate 1 tournament:
For each player i, generate a “place” for each player (Pi) by generating a random number between 0 and 1 and raising it to the power of 1/Qi. Pi = rand ^ (1.0 / Qi)
Sort players by their place P – higher is better
Award prizes Z according to P

Repeat for as many tournaments as desired and calculate the average prize value for each player. The error will be proportional to 1/sqrt(iterations) so the more iterations you run, the more accurate it will be.

I’ve tested this out and compared them to traditional ICM calculations and they converge to the same numbers.

Tysen
Are possible to create this algorithm in excel?
I try many other possibles, but i dont have ideia how to create algorithm's
New algorithm to calculate ICM for large tournaments Quote
09-20-2021 , 12:25 AM
hello, how can i solve this problem with this page showing? eyeg
New algorithm to calculate ICM for large tournaments Quote
04-17-2023 , 06:10 AM
Hero Range. 0.20, villain call range 0.45, villain all range 0.32, what is villain folds% ?
Percentage of time villain foids to a shove
New algorithm to calculate ICM for large tournaments Quote
04-27-2023 , 06:17 AM
Hi guys, are you currently using the algorithm?

I'm experiencing some strange polarization of results.

Example:

Payouts (50,30,20), Stacks(50,40,30)

-> SimultatedICM (37.2, 29.7, 33.0)
-> Real ICM(35.9 , 33.4, 30.5)


I experience that if stacks are 'near' then the lowest stacks get highest equities then the others.
Are you expiriencing something similar?

thank you.
New algorithm to calculate ICM for large tournaments Quote
04-27-2023 , 08:41 AM
The algorithm by trojanrabbit produces the exact same results as ICM if you collect sufficiently large samples. If you get different results then you either ran too few samples or you have a bug in your implementation.
New algorithm to calculate ICM for large tournaments Quote
04-27-2023 , 10:16 AM
Quote:
Originally Posted by plexiq
The algorithm by trojanrabbit produces the exact same results as ICM if you collect sufficiently large samples. If you get different results then you either ran too few samples or you have a bug in your implementation.
Thank you, I think I have a bug in my Excel implementation.
New algorithm to calculate ICM for large tournaments Quote

      
m