![]() |
#1
|
|||
|
|||
![]()
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? |
#2
|
|||
|
|||
![]()
i'm going to go out on a limb here and say that no one here can do the calculations in real time.
citanul |
#3
|
|||
|
|||
![]()
[ 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. |
#4
|
|||
|
|||
![]()
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 [img]/images/graemlins/smile.gif[/img]
|
#5
|
|||
|
|||
![]()
Unless you're Rainman, I doubt you could do more than as heads-up ICM calculation in real time.
|
#6
|
|||
|
|||
![]()
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 < 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 < 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 < MAXPLAYERS; i++) { totalFinish[i] = new Array(0,0,0); } getResults(totalFinish, stacks, totalChips); for (i = 0; i < MAXPLAYERS; i++) { EV = 0; for (j = 0; j < 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 < 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 < MAXPLAYERS; i++) { // i is first if (stacks[i] > 0) { tempTotal = totalChips - stacks[i]; for (j = 0; j < 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 < MAXPLAYERS; i++) { // i is first if (stacks[i] > 0) { for (j = 0; j < MAXPLAYERS; j++) { // j is second if (j != i && stacks[j] > 0) { tempTotal = totalChips - stacks[i] - stacks[j]; for (k = 0; k < MAXPLAYERS; k++) { // k is third if (k != i && 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 ] |
#7
|
|||
|
|||
![]()
Perl is sexier.
|
#8
|
|||
|
|||
![]()
[ QUOTE ]
sub icm { my ($s_a, $total, $data) = (shift, 0, []); $total += $_ foreach (@$s_a); $data->[$_] = { stack => $s_a->[$_], 0 => $s_a->[$_] / $total } foreach (0 .. $#$s_a); foreach my $i (0 .. $#$s_a) { next unless ($s_a->[$i] > 0); my $temp = $total - $s_a->[$i]; foreach my $j (0 .. $#$s_a) { next unless ($j != $i); $data->[$j]->{1} += $s_a->[$j] / $temp * $data->[$i]->{0};} } foreach my $i (0 .. $#$s_a) { next unless ($s_a->[$i] > 0); foreach my $j (0 .. $#$s_a) { next unless ($j != $i && $s_a->[$j] > 0); my $temp = $total - $s_a->[$i] - $s_a->[$j]; foreach my $k (0 .. $#$s_a) { next unless ($k != $i && $k != $j); $data->[$k]->{2} += $s_a->[$k] / $temp * $data->[$i]->{0} * $s_a->[$j] / ($temp + $s_a->[$j]); } } } $_->{ev} = .5 * $_->{0} + .3 * $_->{1} + .2 * $_->{2} foreach (@$data); return $data; } [/ QUOTE ] Ugg. |
#9
|
|||
|
|||
![]()
well, *I* do it in my head. but i didn't expect others did.
citanul |
#10
|
|||
|
|||
![]()
Hmm let's see how far we can take this...
Lisp is sexier. |
![]() |
|
|