- O quebra-cabeça de adivinhar números de Steve Ballmer é um jogo para encontrar um número entre 1 e 100; uma busca binária fixa pode ser explorada, mas, ao usar uma estratégia mista, é possível criar um valor esperado positivo independentemente da escolha do adversário
- Ballmer acreditava que, mesmo com uma escolha aleatória, o valor esperado seria negativo e que ele poderia escolher números que demorassem mais para serem encontrados, mas John Graham-Cumming refutou isso, afirmando que, com escolha aleatória, o valor esperado é de US$ 0,20
- Em um padrão de busca fixo, pelo menos 37 dos 100 números exigem 6 perguntas, gerando prejuízo; se o adversário conhecer a estratégia, pode fazer o jogador perder todas as vezes
- A solução é uma estratégia mista da teoria dos jogos, escolhendo probabilisticamente uma entre várias estratégias puras de busca, de modo a eliminar números desfavoráveis ao nivelar a diferença entre vitórias e derrotas para cada número
- Uma estratégia de exemplo encontrada ao resolver o problema de programação linear com
scipy.linprog()gera lucro esperado médio de US$ 0,16 se Ballmer escolher aleatoriamente e, mesmo que escolha de forma adversarial, lucro esperado de US$ 0,14 no pior caso
O quebra-cabeça de adivinhar números e a refutação anterior
- O quebra-cabeça de que Ballmer gostava é um jogo em que o adversário pensa em um número entre 1 e 100 e, a cada palpite do jogador, informa se o número é maior ou menor
- A recompensa é US$ 5 se acertar no primeiro palpite; depois US$ 4, US$ 3, US$ 2, US$ 1, US$ 0 e, a partir daí, o jogador passa a pagar US$ 1, US$ 2, US$ 3, e assim por diante
- Ballmer via dois motivos para não jogar esse jogo
- Julgava que, mesmo escolhendo números aleatoriamente, haveria muitos números que gerariam perda, tornando o valor esperado negativo
- Acreditava que poderia escolher estrategicamente os números que levariam mais tempo em uma busca binária
- John Graham-Cumming, em “Steve Ballmer’s incorrect binary search interview question”, refutou Ballmer dizendo que, se ele escolhesse números aleatoriamente, o valor esperado seria positivo, de US$ 0,20
- Indo além, também é possível encontrar uma estratégia com valor esperado positivo mesmo quando Ballmer escolhe os números estrategicamente
A fraqueza da busca binária fixa
- Se o jogador sempre usa a mesma estratégia de busca binária, 37 dos 100 números exigem 6 perguntas até serem acertados
- Se Ballmer conhecer essa estratégia fixa, pode escolher um desses 37 números “perdedores” e forçar prejuízo ao jogador
- Essa vulnerabilidade não se limita a uma busca binária específica
- Em qualquer padrão de busca fixo, pelo menos 37 números geram perda
- Se o adversário escolher um desses números, o jogador perde todas as vezes
Resposta com estratégia mista
- Em vez de fixar um único padrão de busca, prepara-se vários padrões de busca e, no início do jogo, sorteia-se probabilisticamente um deles, mantendo-o até o fim
- Na teoria dos jogos, isso é chamado de estratégia mista baseada em várias estratégias puras
- O mesmo número pode ser vencedor em um padrão de busca e perdedor em outro
- O objetivo da estratégia mista é nivelar a receita esperada para cada número, fazendo com que o valor esperado seja positivo para todos os números
Encontrando a estratégia por programação linear
- O objetivo não é encontrar a estratégia ótima que maximiza o valor esperado no pior caso, ou seja, o equilíbrio de Nash, mas sim encontrar alguma estratégia vencedora para todos os números
- Cada estratégia pura pode ser representada por um vetor de vitória
V = (v_1, .., v_100)de comprimento 100v_ké o lucro esperado quando Ballmer escolhe o númerok- Por exemplo, a busca binária pode ter valores como
v_50 = 5,v_25 = 4,v_0 = -1
- Se uma estratégia mista escolhe a estratégia pura
V_kcom probabilidadep_k, o vetor de vitória total se tornaV_mixed = Σ p_i V_i - Para encontrar uma estratégia vencedora, é necessária uma combinação linear que satisfaça as seguintes condições
- Cada elemento deve ser positivo
- Os coeficientes, por serem probabilidades, não podem ser negativos
- Esse é um problema típico de programação linear, que pode ser resolvido com
scipy.optimize.linprogdo SciPy - Ao criar um conjunto de estratégias puras com várias variantes de busca binária e colocá-las no código que usa
scipy.linprog(), obtém-se uma estratégia mista vencedora
Estratégia de exemplo e resultados
- O código completo está em gukoff/ballmer_puzzle
- O resultado inicial era de US$ 0,07 por jogo, e Arthur O’Dwyer melhorou o desempenho adicionando novas estratégias puras
- O desempenho da estratégia mista melhorada é o seguinte
- Lucro médio quando Ballmer escolhe aleatoriamente: US$ 0,16
- Lucro no pior caso quando Ballmer escolhe de forma adversarial: US$ 0,14
- A estratégia mista de exemplo combina várias variantes de busca binária com pequenas probabilidades
- Probabilidade de 0,4714%: primeiro palpite 29; depois, palpitar o meio do intervalo e, em caso de empate, escolher a esquerda
- Probabilidade de 0,1691%: primeiro palpite 33; depois, palpitar o meio e, em caso de empate, escolher a esquerda
- Probabilidade de 0,1299%: primeiro palpite 36; depois, palpitar o meio e, em caso de empate, escolher a direita
- Probabilidade de 3,3341%: primeiro palpite 37; depois, palpitar o meio e, em caso de empate, escolher a direita
- Probabilidade de 1,7818%: primeiro palpite 43; depois, escolher o elemento mais à direita dentro do intervalo que não aumenta a complexidade no pior caso
- Probabilidade de 1,1608%: primeiro palpite 44; depois, escolher o elemento mais à esquerda dentro do intervalo que não aumenta a complexidade no pior caso
- Probabilidade de 2,1310%: primeiro palpite 42; depois, escolher um elemento próximo à extremidade do intervalo que não aumenta a complexidade no pior caso
- A estratégia completa tem 74 linhas, e a lista completa omitida pode ser vista na winning strategy no GitHub
- Se um lucro médio de 14 centavos por jogo compensar o tempo gasto, vale a pena jogar caso Ballmer proponha esse jogo
1 comentários
Opiniões no Hacker News
Post relacionado recente: a pergunta errada de busca binária em entrevista de Steve Ballmer - https://news.ycombinator.com/item?id=41434637 - setembro de 2024, 240 comentários
A aplicação deste texto é legal, mas parece que ele deixa escapar o ponto central
O argumento de Ballmer é, essencialmente, sobre risco de cauda. Se você dá importância à sobrevivência, valor esperado não é nem de longe um bom critério para apostar. Porque você só tem uma oportunidade. É o mesmo motivo pelo qual, no pôquer, não faz sentido apostar todo o seu patrimônio toda vez que você tem uma mão que “em valor esperado” deve ganhar; em poucas rodadas, você quase certamente vai quebrar
Seja a média +US$0,07 ou o que for, a amplitude da distribuição claramente pode ir para abaixo de 0. Em média, talvez a probabilidade de ganhar seja um pouco maior do que a de perder, mas, na prática, você só recebe um resultado. Se o objetivo é ganhar ou estar acabado, e se você não quer ficar devendo dinheiro ao Ballmer, é melhor não jogar
O mais interessante seria fazer uma simulação de Monte Carlo dessa estratégia e ver a distribuição de vitórias e derrotas. Aí a escolha talvez não seja tão óbvia
Se desse para jogar alguns trilhões de vezes, aí claro que poderia arrancar tudo dele :P
Mesmo como exemplo de risco de cauda, não é muito bom. Na estratégia óbvia, a cauda é extremamente grossa
Sam Bankman-Fried gostava muito de valor esperado e ficou famoso por dizer que faria um lançamento de moeda que, se desse cara, dobraria o “valor” do mundo, mas, se desse coroa, destruiria o mundo
Em resumo, o paradoxo de São Petersburgo é assim. Você lança uma moeda justa até sair cara, e o jogador recebe US$2^n, em que n é o número de lançamentos. Se sair cara no primeiro, recebe US$2; no segundo, US$4; no terceiro, US$8; no décimo, US$1024 (2^10), e assim por diante. É fácil mostrar que o valor esperado desse jogo se aproxima do infinito
Portanto, uma pessoa perfeitamente racional deveria estar disposta a pagar praticamente qualquer quantia para jogar esse jogo. Como qualquer quantia finita é menor que o infinito, o ganho esperado é sempre positivo
Mas provavelmente quase ninguém pagaria milhões de dólares para jogar esse jogo. Talvez SBF seja uma exceção
Isso só é um paradoxo se você achar que mostra que as pessoas não são “racionais”. Na prática, parece significar que valor esperado não é uma boa medida de risco, e todo mundo sabe disso
Um texto bastante completo e interessante sobre o paradoxo de São Petersburgo: https://plato.stanford.edu/entries/paradox-stpetersburg/
Ao contrário da maioria aqui, acho que esse tipo de pergunta é uma forma razoavelmente boa de ver como uma pessoa pensa. Se alguém tem formação em matemática/estatística/ciência da computação, eu esperaria que pelo menos conseguisse iniciar uma conversa sobre esse problema
Mas, se você esconde premissas ou acrescenta restrições arbitrárias e infundadas para transformá-la em pegadinha, é aí que deixa de fazer sentido para mim
Se a pergunta é “você jogaria este jogo?”, a tradução matemática racional é “determine se o valor esperado é maior que 0”. Se quiser falar de risco de cauda, é preciso especificar uma função de utilidade, que pode inclusive ser assimétrica para os dois jogadores. E é preciso dizer claramente que essa é a intenção
Sinceramente, parece que Steve não entendeu direito a profundidade matemática desse problema
Se você apostar mais do que a fração de Kelly, o risco de falência aumenta, especialmente no longo prazo
https://en.m.wikipedia.org/wiki/Kelly_criterion
Não estou dizendo que ele se aplique à situação do post original. Mas é relevante para o comentário-pai e é muito útil em várias situações, como investimentos
Quando Ballmer disse “adversarial”, pensei numa estratégia assim. Na verdade, ele não precisa escolher um número fixo no início. A cada palpite, basta dar a resposta que deixa o maior conjunto possível de números restantes; assim, contra qualquer estratégia, ele consegue garantir a derrota
O post original apresenta uma estratégia aleatória complexa que garante uma média mínima de $0.07 contra qualquer adversário. Já Ballmer, por outro lado, só precisa adiar a “escolha” e enrolar para forçar sete palpites toda vez e fazer você pagar 1 dólar
Se você esperasse ganhar $0.07 em média, quantas rodadas jogaria antes de perceber que está sendo enganado?
O post original é interessante, mas assume um sentido bem fraco de “adversarial”, no qual Ballmer ainda se compromete com alguma escolha inicial
Curiosamente, se Ballmer usar um esquema de compromisso, o jogador consegue verificar isso [1]. Por exemplo, no início do jogo, Ballmer gera 500 bits aleatórios, anexa a eles o número escolhido no intervalo de 1 a 100 e envia o hash do resultado. Ao fim do jogo, ele envia os 500 bits aleatórios, e o jogador pode então concatená-los com o número escolhido agora revelado e verificar se o hash resultante é o mesmo hash enviado no início. Para mentir e trocar o número, Ballmer teria de encontrar 500 bits que, concatenados a outro número, ainda produzissem o hash original, o que é difícil
[1]: https://en.wikipedia.org/wiki/Commitment_scheme
Foi feito pelo criador do HATERIS, uma variante de Tetris que sempre dá o pior bloco
Edit: ah, não. Este comentário está errado. Obrigado ao fgna por apontar isso
Acho que há uma prova mais simples de que dá para vencer um Ballmer adversarial. O resultado esperado é exatamente o mesmo de uma busca binária contra um Ballmer aleatório
O nome do meu algoritmo é “busca binária com deslocamento aleatório”. Funciona assim
offsetoffsetao valor e use o resto da divisão por 100Só isso. Agora, mesmo que Ballmer conheça essa estratégia, ele não consegue escolher um número específico para piorar o desempenho. Portanto, o resultado esperado continua sendo $0.20 por jogo, melhor que a estratégia proposta no texto
Entre muitas coisas em que Ballmer esteve errado, parece que esta foi mais uma
Isto, meus amigos, é um exemplo perfeito de por que o processo moderno de entrevistas técnicas é pura insanidade
A pergunta de Ballmer parece justa considerando a complexidade da resposta que ele esperava
O candidato provavelmente daria uma resposta matematicamente incorreta, mas, no processo, mostraria seu raciocínio e demonstraria um pouco de princípios de ciência da computação
É preciso considerar que a carreira de Ballmer foi longa. Se ele realmente fez essa pergunta, provavelmente foi nos anos 80, e naquela época ninguém esperaria a solução complexa descrita no texto
Dar a resposta correta seria algo impressionante e motivo para contratação imediata. Mas a pergunta não me parece fundamentalmente quebrada, porque, apostando ou não, qualquer resposta precisa ser bem justificada
Em geral há uma discussão com todos os entrevistadores, e não se olha apenas “o candidato acertou o problema?”. Pessoalmente, acho muitas perguntas de entrevistas de big tech idiotas, mas, tendo passado pelo processo dos dois lados, acho que ele não é tão quebrado quanto parece
Neste caso, bastaria mostrar que você consegue raciocinar sobre busca binária e demonstrar que o lucro médio é de 0,20 dólar
Ainda assim, graças a isso ganhamos boa ficção como https://aphyr.com/posts/340-reversing-the-technical-intervie... e suas continuações
Um texto que analisa o equilíbrio de Nash de forma mais ampla, incluindo a solução numérica do jogo completo, está em https://bowaggoner.com/blahg/2024/09-06-adversarial-binary-s...
O patrimônio líquido de Steve Ballmer é de US$ 120 bilhões; se uma partida do jogo leva 30 segundos, levaria 1,6 milhão de anos para ganhar tudo
Little Mathematics Library – Elements of Game Theory: https://mirtitles.org/2012/09/06/little-mathematics-library-...
É um livro muito bom sobre estratégias mistas em teoria dos jogos
O exemplo motivacional apresentado no livro também é excelente
“Há duas cartas: um ás e um 2. O jogador A tira aleatoriamente uma delas, e B não vê qual carta foi tirada. Se A tirou o ás, ele diz ‘tenho o ás’ e exige 1 dólar do adversário. Se A tirou o 2, pode (A1) dizer ‘tenho o ás’ e exigir 1 dólar do adversário, ou (A2) confessar que tem o 2 e dar 1 dólar ao adversário
Se o adversário receber voluntariamente 1 dólar, não tem escolha a não ser aceitar. Mas, se for cobrado 1 dólar, ele pode (B1) acreditar que A tem o ás e pagar 1 dólar, ou (B2) exigir uma verificação para ver se a afirmação de A é verdadeira. Se A realmente tiver o ás, B deve pagar 2 dólares a A. Por outro lado, se A estava blefando e tinha o 2, A paga 2 dólares a B
Analise este jogo e encontre a estratégia ótima de cada jogador e o payoff esperado”