Cosa prodigiosa, ahora con palabras (II)

Tal como prometí hace ahora una semana, voy a añadir las palabras que faltaban en aquella entrada. Pero primero, imaginad un bar en el que se venden cafés y cervezas. El coste de servir un café es de 1.10 euros pero se vende por 1. El coste de servir una cerveza es 1.30 euros pero se vende por 1.10. Entran los clientes y piden o café o cerveza. ¡Y resulta que a fin de mes el bar hace dinero!

¿Es posible eso? No, obviamente… ¿o sí? Sigamos leyendo.

En la entrada original proponía tres juegos. El primero, descrito con código así,

jugar <- function( n, make.step ){
  tmp <- rep( 0L, n)
  for( i in 2:n )
    tmp[i] <- make.step( tmp[i-1] )
  tmp
}

juego.s <- function( x, prob.perder = 0.51 ){
  x + ifelse( runif(1) < prob.perder, -1L, 1L )
}

res.juego.s <- replicate( 1000, jugar( 1000, juego.s )[1000] )
hist( res.juego.s )
fivenum( res.juego.s )

es simple: se tira una moneda y si sale cara, recibes un euro y, si sale cruz, lo pierdes. Aunque la moneda tiene un sesgo de manera que se gana/pierde con probabilidad 0.49/0.51. Como puede observarse, en el largo plazo se tiende a perder dinero si se juega repetidamente.

El segundo juego es parecido al primero pero algo más complejo:

juego.c <- function( x ){
  prob.perder <- ifelse( x %% 3 == 0, 0.905, 0.255 )
  juego.s( x, prob.perder )
}

res.juego.c <- replicate( 1000, jugar( 1000, juego.c )[1000] )

hist( res.juego.c )
fivenum( res.juego.c )

Se juega con dos monedas:

  • si la cantidad ganada hasta la fecha es múltiplo de 3, se juega con una con la que la probabilidade de ganar es de sólo el 9.5 % pero
  • en el caso contrario, se juega con otra con la que la probabilidad de ganar es del 74.5 %.

Este es otro juego en el que, jugando repetidamene, también se acaba perdiendo. Para verlo, sólo hay que darse cuenta de que las situaciones en que la cantidad ganada o perdida es múltiplo de 3 representan una especie de barrera probabilística: en ellas casi siempre se pierde. Y las probabilidades de ganar y perder con ambas monedas se han elegido de tal manera que es —un poquito — más probable pasar de tener 3n euros a 3(n-1) euros que a tener 3(n+1) euros.

Así, si observamos el juego sólo cuando la cantidad acumulada es múltiplo de tres (obviando lo que pasa en las jugadas intermedias), veremos que se trata de un juego parecido al anterior.

El tercero de los juegos es más interesante. Es similar a los anteriores, sólo que utiliza una moneda más. En cada jugada, se tira la última moneda y, si sale cara (con probabilidad 0.5), se juega al primero de los juegos y, si sale cruz, al segundo:

juego.fin <- function( x ){
  sample( c( juego.c, juego.s), 1 )[[1]](x)
}

res.juego.fin <- replicate( 1000, jugar( 1000, juego.fin )[1000] )

hist( res.juego.fin )
fivenum( res.juego.fin )

Lo sorprendente de este juego es que, con él, ¡se gana dinero! Es decir, jugando al azar a uno u otro juego perdedores, puedes acabar jugando a un juego ganador.

¿No es increíble que el bar pueda acabar ganando dinero perdiéndolo en cada venta?

La semana que viene, os cuento el rollo matemático que hay detrás de este singular fenómeno. ¡Prometido!

(Quizás, entre tanto, alguien quiera ir avanzando y enterándose de qué es una supermartingala y de qué va eso del teorema del tiempo de parada óptimo que el ejemplo anterior parece violar).

Un comentario sobre “Cosa prodigiosa, ahora con palabras (II)

  1. ChrisL 19 enero, 2012 17:19

    Muy interesante. Es un buena introducion en las supermartigalas. En effecto, es un poco contraintuitivo. Pienso que la explicación es el hecho que en la situacion con los dos juegos combinados, el camino no se pasa el mismo tiempo en 3k, 3k+1 y 3k+2.

    Asi, es possible de escribir el juego equivalente:
    juego.equivalente<-function(x){
    prob.perder <- ifelse( x %% 3 == 0, 0.5*(0.51+0.905), 1-0.5*(0.49+0.745) )
    juego.s( x, prob.perder )
    }
    que es mas fácil de estudiar.
    Con esto, se puede escribir la probabilidád de estar en 3k, 3k+1 o 3k+2:
    # Cadenas de Markov:
    a<-0.5*(0.51+0.905)
    b<-1-0.5*(0.49+0.745)
    A.fin<-matrix(c(0,b,1-b,1-a,0,b,a,1-b,0),ncol=3,nrow=3,byrow=TRUE)
    A.s<-matrix(c(0,0.255,0.745,0.095,0,0.255,0.905,0.745,0),ncol=3,nrow=3,byrow=TRUE)
    B.fin<-A.fin; for(k in 1:100) B.fin<-B.fin%*%A.fin
    B.s<-A.s; for(k in 1:100) B.s B.s%*%c(1,0,0)
    [,1]
    [1,] 0.3836
    [2,] 0.1543
    [3,] 0.4621

    Con juego juego.fin:
    > B.fin%*%c(1,0,0)
    [,1]
    [1,] 0.3448
    [2,] 0.2542
    [3,] 0.4009

    Y la probabilidád de ganar:
    con juego.s:
    > c(0.095,0.745,0.745)%*%B.s%*%c(1,0,0)
    [,1]
    [1,] 0.4957
    con juego.fin:
    > c(1-a,1-b,1-b)%*%B.fin%*%c(1,0,0)
    [,1]
    [1,] 0.5054

    El código y la simulación son correctos; juego.s y juego.c son perdedores pero juego.fin es un juego ganador.
    Pero no sería el caso si el salto no depiende de la posición; en este caso, alguna combinación seria perdadora.

Los comentarios están desabilitados.