Steve Ballmer estaba equivocado
Hace unos días, una publicación de John Graham-Cumming sobre la "pregunta incorrecta de entrevista sobre búsqueda binaria de Steve Ballmer" recibió mucha atención en HackerNews. El acertijo favorito de Ballmer es el siguiente:
Estoy pensando en un número entre 1 y 100. Puedes adivinarlo, y después de cada intento te diré si es más alto o más bajo. Si aciertas en el primer intento, te daré $5. $4, $3, $2, $1, $0, tú tendrás que pagarme $1, $2, $3.
¿Jugarías este juego?
En esta entrevista de YouTube, Steve Ballmer da dos razones por las que no deberías jugar este juego:
- Muchos números entre 1 y 100 producen pérdidas, así que incluso si eliges números al azar, el valor esperado es negativo.
- Él puede elegir estratégicamente el número que más tiempo tome encontrar usando búsqueda binaria.
Sin embargo, John refuta el primer punto al mostrar que, si Ballmer elige el número al azar, el valor esperado real del juego es positivo: $0.20.
Yo voy a refutar el segundo punto y demostrar que el valor esperado del juego es positivo sin importar la estrategia de Ballmer.
Cómo Ballmer puede elegir números de forma adversarial
Supongamos que siempre usas una estrategia de búsqueda binaria para encontrar el número. De los 100 números, 37 requieren 6 preguntas para ser adivinados. Si Ballmer conoce tu estrategia, siempre puede elegir uno de esos números "perdedores" y hacer que pierdas en cada partida. Esto siempre se cumple para cualquier patrón de búsqueda fijo. Al menos 37 números producirán pérdidas, y Ballmer puede escoger uno de ellos.
¿Cómo puedes responder?
Aquí entramos en el terreno de la teoría de juegos. En lugar de un solo patrón de búsqueda fijo, puedes preparar un conjunto de varios patrones de búsqueda. Luego, al comienzo del juego, eliges uno de esos patrones de forma probabilística y te mantienes con él durante toda la partida.
En teoría de juegos, a esto se le llama una estrategia mixta, basada en un conjunto de estrategias puras.
Como el mismo número puede ser "ganador" en un patrón de búsqueda y "perdedor" en otro, estas estrategias mixtas pueden "nivelar" la ganancia esperada de cada número. Potencialmente, una estrategia mixta puede convertir todos los números en "ganadores", es decir, dar una ganancia esperada positiva para cada número. Eso es justo lo que estamos buscando.
Cómo encontrar una estrategia mixta ganadora
Nota: queremos encontrar alguna estrategia que gane para todos los números, no la mejor estrategia ganadora (equilibrio de Nash) con el mayor valor esperado en el peor caso.
Si te interesa el equilibrio de Nash, Arthur O’Dwyer exploró una solución cerrada para el juego de hasta 5 números, y Bo Waggoner aproximó el valor de equilibrio para el juego de 100 números usando aprendizaje online sin arrepentimiento.
Encontrar una estrategia mixta que gane para todos los números puede verse como un problema de optimización matemática. Cada estrategia puede describirse mediante un vector de "ganancias" V=(v1,..,v100), donde vk es la ganancia esperada cuando Ballmer elige el número k. Por ejemplo, la búsqueda binaria podría corresponder a un vector con v50=5, v25=4, v0=−1.
Supongamos que hay estrategias puras V1, V2, ..., Vn, y que la estrategia mixta elige la estrategia Vk con probabilidad pk. Entonces el vector de "ganancias" correspondiente de la estrategia mixta es simplemente una combinación lineal: Vmixed=∑i=1npiVi.
Con esta interpretación, encontrar una estrategia ganadora equivale a encontrar una combinación lineal con dos restricciones:
- Cada elemento de la combinación lineal es positivo (puedes ganar dinero en promedio para cada número).
- Los coeficientes de esa combinación lineal no son negativos (corresponden a probabilidades).
Este es un problema típico de programación lineal, y scipy tiene una solución eficiente para ello. Pensé en varias estrategias puras (diferentes búsquedas binarias) para encontrar una estrategia mixta y las alimenté a scipy.linprog() y, voilà, ¡la solución produjo una estrategia ganadora!
Ejemplo de estrategia ganadora
El código completo está en gukoff/ballmer_puzzle. Nota: el resultado inicial de $0.07 fue mejorado significativamente cuando Arthur O’Dwyer añadió nuevas estrategias puras.
- Ganancia promedio si Ballmer elige al azar: $0.16
- Peor ganancia si Ballmer elige de forma adversarial: $0.14
La estrategia mixta resultante es la siguiente:
- Probabilidad 0.4714%: búsqueda binaria, primer intento 29. En cada paso se adivina el elemento medio del intervalo. En caso de empate, se adivina el elemento de la izquierda
- Probabilidad 0.1691%: búsqueda binaria, primer intento 33. En cada paso se adivina el elemento medio del intervalo. En caso de empate, se adivina el elemento de la izquierda
- Probabilidad 0.1299%: búsqueda binaria, primer intento 36. En cada paso se adivina el elemento medio del intervalo. En caso de empate, se adivina el elemento de la derecha
- Probabilidad 3.3341%: búsqueda binaria, primer intento 37. En cada paso se adivina el elemento medio del intervalo. En caso de empate, se adivina el elemento de la derecha
- Probabilidad 1.7818%: búsqueda binaria, primer intento 43. En cada paso se adivina el elemento más a la derecha del intervalo que no aumente la complejidad en el peor caso
- Probabilidad 1.1608%: búsqueda binaria, primer intento 44. En cada paso se adivina el elemento más a la izquierda del intervalo que no aumente la complejidad en el peor caso
- Probabilidad 2.1310%: búsqueda binaria, primer intento 42. En cada paso se adivina un elemento extremo del intervalo que no aumente la complejidad en el peor caso
...
La estrategia completa tiene 74 líneas, que se omiten aquí por brevedad. Si te interesa, puedes revisarla en GitHub.
Conclusión
Si puedes ganar en promedio 14 centavos por partida, la próxima vez que Steve Ballmer te proponga este juego, definitivamente deberías aceptar.
Resumen de GN⁺
- Este artículo trata la discusión sobre el juego de búsqueda binaria de Steve Ballmer.
- Explica cómo usar teoría de juegos para encontrar una estrategia mixta que permita ganar sin importar la estrategia de Ballmer.
- Este artículo puede ser útil para quienes estén interesados en teoría de juegos y problemas de optimización.
- Otros proyectos con funciones similares incluyen diversas investigaciones y artículos sobre teoría de juegos.
1 comentarios
Opiniones de Hacker News
El argumento de Ballmer trata sobre el riesgo de cola
Cuando Ballmer dijo que era "adversarial", estaba considerando que no necesitaba elegir un número fijo
Se propone un algoritmo llamado "búsqueda binaria con desplazamiento aleatorio"
Es una más de las muchas cosas en las que Ballmer estaba equivocado
Se recomienda el libro "Little Mathematics Library – Elements of Game Theory"
Se comparte un enlace que ofrece un análisis más amplio del equilibrio de Nash y una solución numérica para el juego completo
El proceso moderno de entrevistas técnicas es un ejemplo de absoluta locura
Estaba buscando un comentario de "esto parece correcto, ¡bien hecho!", pero como no había uno, lo dejo yo mismo
El patrimonio neto de Steve Ballmer es de 120 mil millones de dólares