Intuitivamente esto ya lo sabíamos: en una mesa de Cash hay 300$ en el bote, la cantidad a subir o los pot odds para ver una apuesta de 10$ se pueden calcular directamente. Sin embargo, en un S&G, si sólo te quedan 10$ sólo los deberías jugar con un equity mayor de 0,5; otro ejemplo, si tienes 6.000$ y uno de los rivales tiene 290$ puedes hacerle shove con un rango bastante amplio porque 290$ de tu pila valen mucho menos que los últimos 290$ de su pila; un tercer ejemplo, sigues con 6.000$, tienes TT y un rival con más fichas hace shove, en este caso la intuición (del cash) te dice que es una buena oportunidad para ganar 6.000$ mientras que ICM te recuerda que perder 6.000$ significa perder el torneo y que deberías hacer fold. En ICM, 12.000$ nunca es el doble de 6.000$, es bastante menos
En el foro de Poker red Sergeon colgó una introducción a ICM a partir de varios artículos, a su vez, del foro 2+2.
Vamos a incorporar algunos cálculos basados en ICM a HHJReader (estupendo programa). De momento, hemos programado una calculadora de ICM en Excel. Aquí vemos el resultado y el código utilizado (traducido a VBA a partir de JAVA). Con este código cualquiera puede construirse su propia calculadora usando Excel o, directamente, en Visual Basic.
El código:
' Calculo de ICM en VBA para excel
' Autor (de la adaptación a VBA): Isabella70
' Fecha: 2009-06-10
' Fuente de las fórmulas en JAVA: http://pokerai.org/wiki/index.php/ICM_Equity_Calculator
'
' Uso:
' - la función recibe un número (1-n) que es id del jugador
' - "Payoffs" es un rango en el excel (una columna) que tiene los premios a repartir
' (pueden ser porcentajes o neto)
' - "Pilas" es otro rango del excel (otra columna) que contiene las pilas actuales
' de los jugadores
Function getEquity(i)
' la función recibe el jugador cuyo EV queremos calcular
currentPlayer = i
premios = Range("Payoffs")
pilas = Range("Pilas")
' calculamos el total de chips
Dim total As Double
total = 0
For Each chip In pilas
' hay tantos jugadores como pilas diferente de 0
If chip = 0 Then
Exit For
End If
total = total + chip
Next chip
' la función recursiva calcula el EV del jugador en cada nivel
' 1 si es el ganador, 2 si es el segundo, etc.
getEquity = getEquityRecursivo(premios, pilas, total, currentPlayer, 1)
End Function
Function getEquityRecursivo(payouts, stacks, total, player, depth)
Dim eq As Double
' los rangos son bidimensionales, en este caso siempre hay 1 columna
stack_player = stacks(player, 1)
payout_puesto = payouts(depth, 1)
' EV: probabilidad de ganar por premio
' la probabilidad es la relación entre las fichas del jugador y todas las fichas en juego
eq = payout_puesto * stack_player / total
' sólo calculamos el EV de los puestos con premio, el resto es 0
If depth <= UBound(payouts) Then
For ist = 1 To UBound(stacks)
st = stacks(ist, 1)
If ist <> player And st > 0 Then
Dim c As Double
c = stacks(ist, 1)
stacks(ist, 1) = 0
' Debug.Print "+ Player: " & player & " depth: " & depth & " eq: " & eq
eq = eq + getEquityRecursivo(payouts, stacks, total - st, player, depth + 1) * st / total
' Debug.Print "- Player: " & player & " depth: " & depth & " eq: " & eq
stacks(ist, 1) = c
End If
Next ist
End If
getEquityRecursivo = eq
End Function
Existen en Internet muchas calculadoras de ICM, por ejemplo en, como no, ICM Poker.
El código en Java lo hemos sacado de POKERAI. ICM Equity Calculator (Pokerai).
No hay comentarios:
Publicar un comentario
Tus comentarios son bienvenidos