PDA

View Full Version : ICM, because I don't have a degree in mathematics...

SammyKid11
07-21-2005, 12:05 PM
I've read dethgrind's clinic on ICM in the FAQ. I've bought SnGPT's and use it to review hands to see where my pushes or called pushes have been right and wrong...so I'm trying to develop an "instinct" for when to push, when to call, etc.

However, I know some in this forum can actually do the calculations in real time (since plugging the data into SnGPT's isn't practical while 4+ tabling). So, to those of you that skilled/experienced...are there some mathematical shortcuts that you use to be able to recognize your +EV pushes/calls...or is it just going through enough examples that you start to recognize situations which are ICM-similar?

citanul
07-21-2005, 12:14 PM
i'm going to go out on a limb here and say that no one here can do the calculations in real time.

citanul

schwza
07-21-2005, 12:15 PM
[ QUOTE ]
I know some in this forum can actually do the calculations in real time

[/ QUOTE ]

i highly doubt that. icm is pretty complicated.

here's my tip for doing chipEV calcs in real time (then you have do a fudge factor to get to \$EV). suppose i raise to 150 at the 25/50 level and the BB pushes for 800.

my 150, his 150, and the SB's 25 are all dead money, for a total of 325. i have to call 650 more. the bet is 2x the pot, so i need to be 40% to be neutral chip EV. i'll need to be more to be neutral \$EV, but i just take a guess on how much.

if the bet equals the pot, 33%, 1/2 pot 25%. you can do others, but those are good rules of thumb.

wildzer0
07-21-2005, 12:31 PM
The first day I bought eastbay's calc, I actually sat down and ran through just about every hand in the small blind and on the button at every stack level and every range. I made a chart with the results and studied it until I knew enough about the numbers to basically understand where my hand stands against an opponents likely range and what kind of odds I need to betting to push or call. I don't think anyone can do the calcs in real time, but if you put some effort into it, you can make a pretty accurate real time decision. Think of it as memorizing your multiplication tables /images/graemlins/smile.gif

Slim Pickens
07-21-2005, 12:33 PM
Unless you're Rainman, I doubt you could do more than as heads-up ICM calculation in real time.

microbet
07-21-2005, 12:41 PM
You guys don't do ICM in your head? Come on, this is all you have to do:

[ QUOTE ]
function go() {
MAXPLAYERS = 10;
ITM_SPOTS = 3;

stacks = new Array(MAXPLAYERS);
payout = new Array(ITM_SPOTS);
totalChips = 0;
for (i = 0; i &lt; MAXPLAYERS; i++) {
// the even inputForm elements are the input fields
stacks[i] = parseInt(document.inputForm.elements[2*i].value);
if (isNaN(stacks[i])) { stacks[i] = 0; }
totalChips += stacks[i];
}
document.inputForm.total.value = totalChips;

for (i = 0; i &lt; ITM_SPOTS; i++) {
payout[i] = parseFloat(document.payoutForm.elements[i].value);
if (isNaN(payout[i])) { payout[i] = 0; }
}

totalFinish = new Array(MAXPLAYERS);
for (i = 0; i &lt; MAXPLAYERS; i++) {
totalFinish[i] = new Array(0,0,0);
}
getResults(totalFinish, stacks, totalChips);

for (i = 0; i &lt; MAXPLAYERS; i++) {
EV = 0;
for (j = 0; j &lt; ITM_SPOTS; j++) {
EV += payout[j]*totalFinish[i][j];
}
// the odd inputForm elements are the output fields, despite the name "inputForm"
EV = Math.round(EV*10000)/10000;
document.inputForm.elements[2*i+1].value = EV;
}
}

function getResults(totalFinish, stacks, totalChips) {
//get first place results
for (i = 0; i &lt; MAXPLAYERS; i++) {
totalFinish[i][0] = 0;
totalFinish[i][1] = 0;
totalFinish[i][2] = 0;
if (totalChips != 0) {
totalFinish[i][0] = stacks[i]/totalChips;
}
}

//get second place results
for (i = 0; i &lt; MAXPLAYERS; i++) { // i is first
if (stacks[i] &gt; 0) {
tempTotal = totalChips - stacks[i];
for (j = 0; j &lt; MAXPLAYERS; j++) { // j is second
if (j != i) {
if (tempTotal != 0) {
totalFinish[j][1] += stacks[j]/tempTotal * totalFinish[i][0];
}
}
}
}
}

//get third place results
for (i = 0; i &lt; MAXPLAYERS; i++) { // i is first
if (stacks[i] &gt; 0) {
for (j = 0; j &lt; MAXPLAYERS; j++) { // j is second
if (j != i &amp;&amp; stacks[j] &gt; 0) {
tempTotal = totalChips - stacks[i] - stacks[j];
for (k = 0; k &lt; MAXPLAYERS; k++) { // k is third
if (k != i &amp;&amp; k != j) {
if (tempTotal != 0) {
totalFinish[k][2] += stacks[k]/tempTotal
* totalFinish[i][0] * stacks[j]/(tempTotal+stacks[j]);
// Probability of k getting third times probability of i
// getting first times probability of j getting 2nd given
// i got first. Get it?
}
}
}
}
}
}
}
}

[/ QUOTE ]

spentrent
07-21-2005, 12:45 PM
Perl is sexier.

microbet
07-21-2005, 12:50 PM
[ QUOTE ]
sub icm {
my (\$s_a, \$total, \$data) = (shift, 0, []);
\$total += \$_ foreach (@\$s_a);
\$data-&gt;[\$_] = { stack =&gt; \$s_a-&gt;[\$_], 0 =&gt; \$s_a-&gt;[\$_] / \$total }
foreach (0 .. \$#\$s_a);
foreach my \$i (0 .. \$#\$s_a) {
next unless (\$s_a-&gt;[\$i] &gt; 0);
my \$temp = \$total - \$s_a-&gt;[\$i];
foreach my \$j (0 .. \$#\$s_a) {
next unless (\$j != \$i);
\$data-&gt;[\$j]-&gt;{1} += \$s_a-&gt;[\$j] / \$temp * \$data-&gt;[\$i]-&gt;{0};} }
foreach my \$i (0 .. \$#\$s_a) {
next unless (\$s_a-&gt;[\$i] &gt; 0);
foreach my \$j (0 .. \$#\$s_a) {
next unless (\$j != \$i &amp;&amp; \$s_a-&gt;[\$j] &gt; 0);
my \$temp = \$total - \$s_a-&gt;[\$i] - \$s_a-&gt;[\$j];
foreach my \$k (0 .. \$#\$s_a) {
next unless (\$k != \$i &amp;&amp; \$k != \$j);
\$data-&gt;[\$k]-&gt;{2} += \$s_a-&gt;[\$k] / \$temp
* \$data-&gt;[\$i]-&gt;{0} * \$s_a-&gt;[\$j]
/ (\$temp + \$s_a-&gt;[\$j]); } } }
\$_-&gt;{ev} = .5 * \$_-&gt;{0} + .3 * \$_-&gt;{1} + .2 * \$_-&gt;{2} foreach (@\$data);
return \$data;
}

[/ QUOTE ]

Ugg.

citanul
07-21-2005, 12:56 PM
well, *I* do it in my head. but i didn't expect others did.

citanul

spentrent
07-21-2005, 01:19 PM
Hmm let's see how far we can take this...

Lisp is sexier.

durron597
07-21-2005, 01:22 PM
[ QUOTE ]
so I'm trying to develop an "instinct" for when to push, when to call, etc.

[/ QUOTE ]

I don't know if you think my instincts are good or not, but I ran a dozen ICM calculations or so and read posts on here. The only way to get good at ICM is to practice.

suited_ace
07-21-2005, 01:23 PM
It's just pattern recognition. The more you analyze your tournaments w/ SNGPT, the more you understand the mechanics of ICM. You end up seeing the same patterns while you're playing.

I've been using it for almost a month now, and it's insane how fast my "ICM instinct" has improved.

Analyze *all* your tourneys in the beginning, it'll make a huge difference, you'll see.

SammyKid11
07-21-2005, 01:23 PM
Well, I wish I could find the post...but I swear I saw one yesterday where someone was talking about doing the ICM calculations in their head. Could have been sarcasm that I missed entirely, or it could have been a real donk...or I suppose it could have been Dustin Hoffman.....

Thanks for the replies, though.

SammyKid11
07-21-2005, 01:27 PM
[ QUOTE ]
[ QUOTE ]
so I'm trying to develop an "instinct" for when to push, when to call, etc.

[/ QUOTE ]

I don't know if you think my instincts are good or not, but I ran a dozen ICM calculations or so and read posts on here. The only way to get good at ICM is to practice.

[/ QUOTE ]

Well, if you hadn't run SnGPT's, then I saw your instincts put to very good use earlier today on a post about pushing A6. Everyone had said push, including me...you said it was slightly -\$EV because of specifically how much money the short stack had (if Hero or SS had had a little more/less in chips it would have changed). I ran it and you were dead-on balls accurate.

So yeah, I wanna practice. I am going over my hands with SnGPT's. Need to start posting the closer ones on here, as well. Thanks again for the replies.

microbet
07-21-2005, 01:42 PM

In case anyone is curious about ICM programming - dethgrind's site has the javascript, C, C++, perl, and mathmatica. I have a version in PHP.

Anyone having ICM in Lisp wins the uber-poker-nerd championship.

Phill S
07-21-2005, 02:27 PM
[ QUOTE ]

In case anyone is curious about ICM programming - dethgrind's site has the javascript, C, C++, perl, and mathmatica. I have a version in PHP.

Anyone having ICM in Lisp wins the uber-poker-nerd championship.

[/ QUOTE ]

Eye Sssshhhhee Em

Phill

microbet
07-21-2005, 02:37 PM
Close enough.

bjb23
07-21-2005, 03:43 PM
[ QUOTE ]

In case anyone is curious about ICM programming - dethgrind's site has the javascript, C, C++, perl, and mathmatica. I have a version in PHP.

Anyone having ICM in Lisp wins the uber-poker-nerd championship.

[/ QUOTE ]

anyone ever done icm in python? i think i might just have to try.

07-21-2005, 03:59 PM
[ QUOTE ]
anyone ever done icm in python? i think i might just have to try.

[/ QUOTE ]

I have. It's lying around on my harddrive somewhere...

UsedToBeARock
07-21-2005, 07:53 PM
[ QUOTE ]
[ QUOTE ]