Calcular Equity rango vs rango

21 respuestas
10/03/2009 20:33
1

Buenas, estoy haciendo un programa, y tengo que calcular la equity de un rango vs otro.

Dispongo de la probabilidad de cualquier mano contra otra mano, y supongo que teniendo eso, calcular rango vs rango es una gilipollez, pero no se me ocurre. ¿Alguien puede ayudarme?

(supongo que lo primero es calcular equity de mano vs rango)

10/03/2009 22:32
Re: Calcular Equity rango vs rango

Añado que también dispongo de la equity de una mano contra un rango.

10/03/2009 22:58
Re: Calcular Equity rango vs rango

Básicamente es hacer la doble suma ponderada, creo que sería así:

Rango A={A1...An}

Rango B={B1...Bm}

EquityRangoAvsB = sum(i=1..n,Pi*sum(j=1..m,Pji*Equity(Ai,Bj))/sum(j=1..m,Pji))/sum(i=1..n,Pi)

con:

Pi = probabilidad de tener la mano Ai

Pji = probabiliad de tener la mano Bj supuesto que el otro tiene Ai

Equity(Ai,Bj) = equity de la mano Ai contra la Bj

10/03/2009 23:25
Re: Calcular Equity rango vs rango

McAlonso;262445 escribió:
Básicamente es hacer la doble suma ponderada, creo que sería así:

Rango A={A1...An}

Rango B={B1...Bm}

EquityRangoAvsB = sum(i=1..n,Pi*sum(j=1..m,Pji*Equity(Ai,Bj))/sum(j=1..m,Pji))/sum(i=1..n,Pi)

con:

Pi = probabilidad de tener la mano Ai

Pji = probabiliad de tener la mano Bj supuesto que el otro tiene Ai

Equity(Ai,Bj) = equity de la mano Ai contra la Bj

Uf, así en modo plano me cuesta muchísimo sacarlo, voy a ver si lo intento, pero si pudieras escribirlo en pseudocódigo me harías mucho más fácil la tarea.

10/03/2009 23:27
Re: Calcular Equity rango vs rango

Ese programa ya existe se llama Pokerstove

10/03/2009 23:29
Re: Calcular Equity rango vs rango

Duchas;262465 escribió:
Ese programa ya existe se llama Pokerstove

Si, tampoco soy tan nuevo, pero lo que hace mi programa no lo hace pokerstove, esto solo es una parte para que haga lo que yo quiero que haga.

10/03/2009 23:34
Re: Calcular Equity rango vs rango

En C:

float ** Equity; //Array doble con las equitys

float ** P; //Array doble con Pji

float * p; //Array simple con Pi

float total=0, parcial, sumaPesosI=0, sumaPesosJ;

for (int i=0;i
parcial=sumaPesosJ=0;

for (int j=0;j
parcial+=P[j][i]*Equity[i][j];

sumaPesosJ+=P[j][i];

}

total+=p[i]*parcial/sumaPesosJ;

sumaPesosI+=p[i];

}

total/=sumaPesosI;

Edito: lo identé pero el foro no guarda espacios al principio de línea 😒

10/03/2009 23:39
Re: Calcular Equity rango vs rango

McAlonso;262470 escribió:
En C:

float ** Equity; //Array doble con las equitys

float ** P; //Array doble con Pji

float * p; //Array simple con Pi

float total=0, parcial, sumaPesosI=0, sumaPesosJ;

for (int i=0;i
parcial=sumaPesosJ=0;

for (int j=0;j
parcial+=P[j][i]*Equity[i][j];

sumaPesosJ+=P[j][i];

}

total+=p[i]*parcial/sumaPesosJ;

sumaPesosI+=p[i];

}

total/=sumaPesosI;

Edito: lo identé pero el foro no guarda espacios al principio de línea 😒

Muchas gracias! ahora mismo lo pruebo, y te digo si me funciona.

10/03/2009 23:52
Re: Calcular Equity rango vs rango

Acabo de probarlo y creo que falla, salvo que haya puesto algo mal, aquí te pongo el código en c#:

public double equityVsRango(Rango rango)

{

double total = 0, parcial, sumaPesosI = 0, sumaPesosJ;

foreach (Mano mi in this.manos)

{

parcial = sumaPesosJ = 0;

foreach (Mano mj in rango.manos)

{

parcial += mj.PorcentajeDadaOtraMano(mi) * mi.EquityVsMano(mj);

sumaPesosJ += mj.PorcentajeDadaOtraMano(mi);

}

total += mi.Porcentaje * parcial / sumaPesosJ;

sumaPesosI += mi.Porcentaje;

}

total /= sumaPesosI;

return total;

}

Sin ir más lejos probando un rango contra él mismo, no da un 50%.

11/03/2009 00:05
Re: Calcular Equity rango vs rango

Hay un problema. Si por ejemplo enfrentas AA vs AA al primero le estamos dando un % mayor de tener AA ya que al segundo le estamos condicionando a que el primero tiene AA. Hay que calcular p[i] también como suma ponderada teniendo en cuenta el rango del rival. Ahora no puedo, inténtalo con esa idea en mente y si no mañana te lo saco.

11/03/2009 01:04
Re: Calcular Equity rango vs rango

McAlonso;262498 escribió:
Hay un problema. Si por ejemplo enfrentas AA vs AA al primero le estamos dando un % mayor de tener AA ya que al segundo le estamos condicionando a que el primero tiene AA. Hay que calcular p[i] también como suma ponderada teniendo en cuenta el rango del rival. Ahora no puedo, inténtalo con esa idea en mente y si no mañana te lo saco.

Puf, precisamente vine al foro para encontrar ayuda, porque no se me ocurre la manera de hacerlo, si pudieras resolverlo con más tiempo te lo agradecería.

11/03/2009 14:38
Re: Calcular Equity rango vs rango

DyLaK;262834 escribió:
Gracias, pero creo que de ahí no me sirve nada para lo mío 😒

jaja, bueno a ver si ahora esto si te ayuda...fijate lo que comentaba en este otro hilo sobre el hand range tool del HM

http://www.poker-red.com/foros/software/26267-preguntonta-hm.html

Saludos!

11/03/2009 17:36
Re: Calcular Equity rango vs rango

DyLaK;262483 escribió:
Acabo de probarlo y creo que falla, salvo que haya puesto algo mal, aquí te pongo el código en c#:



public double equityVsRango(Rango rango)

{

double total = 0, parcial, sumaPesosI = 0, sumaPesosJ;



foreach (Mano mi in this.manos)

{

parcial = sumaPesosJ = 0;

foreach (Mano mj in rango.manos)

{

parcial += mj.PorcentajeDadaOtraMano(mi) * mi.EquityVsMano(mj);

sumaPesosJ += mj.PorcentajeDadaOtraMano(mi);

}

total += mi.Porcentaje * parcial / sumaPesosJ;

sumaPesosI += mi.Porcentaje;

}

total /= sumaPesosI;



return total;

}



Sin ir más lejos probando un rango contra él mismo, no da un 50%.





Lo he revisado y creo que el algoritmo está correcto. Lo que comentaba en el otro mail realmente introduce una cierta asimetría, pero no para rangos iguales, me explico:



Si enfrentas {AA,KK} vs {KK,QQ} con ese algoritmo estamos suponiendo que el rango 1 la mitad de las veces tiene AA y la otra mitad KK. En cambio el rango 2 va a tener menos veces KK que QQ porque lo condicionamos a la mano del primer rango. De todos modos esto no debe impedir que enfrentando dos rangos iguales te diera equity del 50%, así que algún fallo hay.



Yo iría probando empezando por casos simples a ver cuándo te empieza a fallar:

- AA vs AK

- AA vs {AA,AK}

- {AA,AK} vs AA

- {AA,AK} vs {AA,AK}

- etc.



Y comparando con el pokerstove; sabiendo cual es el primero que falla podemos intuir dónde está el problema.

11/03/2009 18:37
Re: Calcular Equity rango vs rango

Ok, aquí está la conclusión de mis pruebas:

AA vs AA,KK = Correcto

AA vs AA,A2s = 78.42% Incorrecto -> 75.262%

AA vs AA,A2o = 87.041% ¿Correcto? -> 87.042%

AA vs AA,32s = Correcto

AA vs JTo, 54s = Correcto

AA vs A2o,A3o = Correcto

AA vs A2o, 53s = Correcto

Por lo que a priori se puede ver que falla cuando son suited, y coincide una carta al menos.

Y como curiosidad, cuando se pone:

AA,KK vs AA = 34.027 cuando debería ser 22.618

11/03/2009 19:11
Re: Calcular Equity rango vs rango

Creo haber encontrado una posible forma de hacerlo:

Por ejemplo: AA,KK vs AA sería:

(

Eq(AAvsAA)*P(AA,AA) +

Eq(KKvsAA)*P(KK,AA)

)

/

P(AA,AA)+P(KK,AA)

Siendo Eq(A,B) la equity de la mano A vs la mano B

y P(A,B) la probabilidad de que repartiendo 4 cartas al azar se de la mano A y la mano B. Es decir, resolviendo quedaría:

(

0.5 * 4/52*3/51*2/50*1/49 +

0.18054 * 4/52*3/51*4/50*3/49

)

/

4/52*3/51*2/50*1/49 + 4/52*3/51*4/50*3/49

Al menos en ese caso da la solución correcta.

11/03/2009 19:12
Re: Calcular Equity rango vs rango

Respecto al anterior mensaje:

Bueno, entonces yo creo que el algoritmo está bien, es posible que haya algún error en las funciones equityVSMano() o PorcentajeDadaOtraMano();

Pon AA vs A2s, si falla ahí es culpa de equityVSMano(), si no tiene que ser de la otra.

Edito: respecto al último mensaje:

Sí esa forma es correcta, el problema es que no es extensible al doble bucle, es decir que te valdría para mano vs rango pero no para rango vs rango.

11/03/2009 19:30
Re: Calcular Equity rango vs rango

La funcion Mano.equityVsMano(otraMano) funciona correctamente, probada con varias manos.

Y porcentajeDadaOtraMano también está probada.

Dios, que rallada de cabeza xD

11/03/2009 22:19
Re: Calcular Equity rango vs rango

¿Te sale bien poniendo AA vs A2s?

11/03/2009 22:22
Re: Calcular Equity rango vs rango

McAlonso;263187 escribió:
¿Te sale bien poniendo AA vs A2s?

Si, mano vs mano funciona perfectamente, porque lo obtengo directamente de un fichero.

13/03/2009 20:15
Re: Calcular Equity rango vs rango

Reproduce los cálculos del AA vs {AA,A2s}, que son sencillos, parecidos al AA,KK vs AA que has puesto antes. Comparando con los que va usando el programa en el algoritmo deberías dar con el error.

Responder

¿Quieres participar?

Inicia sesión o crea tu cuenta gratis para formar parte de la comunidad de Poker-Red.