Fundamentos de GTO

O que é GTO no poker? Uma explicação prática

Introdução ao poker ótimo pela teoria dos jogos, ranges, ações mistas e aos limites de um exemplo com parâmetros definidos.

Sumário

GTO significa game theory optimal, ou ótimo pela teoria dos jogos. No poker, descreve uma estratégia feita para um modelo de jogo específico, de forma que um adversário não consiga ganhar muito explorando-a. Não é a promessa de que um gráfico, uma mão ou uma tela de solver seja a melhor resposta em toda situação.

Posições, stack efetivo, ranges, rake, board, tamanhos de aposta e regra de parada mudam a resposta. Em jogos de informação imperfeita, métodos como minimização de arrependimento contrafactual buscam um equilíbrio aproximado do modelo declarado; não tornam todo no-limit hold'em real “resolvido”. Zinkevich et al. (2007) e Bowling et al. (2015) dão o contexto: a conclusão de Bowling et al. de que o jogo foi resolvido se refere a um modelo heads-up limit especificado, não a todo o NLHE.

Pense em ranges, não em uma mão isolada

Um range reúne as mãos plausíveis de um jogador e seus pesos. Uma estratégia pode combinar ações porque cada uma precisa ser sustentada por um range bem construído; isso não significa alternar as ações por intuição. Leia os pressupostos antes e trate cada frequência como instrução para o modelo e nó identificados.

Para visualizar os ranges pré-flop no produto, veja Ranges. Para conhecer as interfaces de API do produto hospedado, consulte o guia da API do solver GTO. O glossário define termos como EV, range e isomorfismo sem transformar este artigo em documentação da API.

Um exemplo de nó raiz com parâmetros definidos

O exemplo usa um registro real do Direct calculado com CPU e ranges GG200NL de 100 bb: cash 6-max, CO abre para 2.5 bb, BB paga e o flop é Qs Th 2d. O pote raiz é 5.5 bb e o stack restante é 97.5 bb; BB está fora de posição e CO está em posição. A configuração mantém os pesos mistos de classe dos dados de origem; é uma entrada de exemplo, não uma alegação de range pré-flop único nem de equilíbrio completo com rake GG.

Para a classe KQs na raiz BB, a comparação usa médias por classe do CSV nativo. A frequência é a média aritmética das combinações KQs sobreviventes; o EV de cada ação é a média de classe por ação em bb. Não são um resultado ponderado de todo o range, nem o EV de cada combinação, nem a equidade, nem o peso pré-flop original de KQs. O peso de entrada é 0.913 e InRange 0.7500 é a fração de cobertura de combinações sobreviventes.

Frequência da classe KQs no CSV capturado da raiz BB
Frequência da classe KQs no CSV capturado da raiz BB
Ação raizFrequência KQs
Check0.3978
Apostar 3 bb0.6022
Apostar 97 bb0

A exportação de estratégia nativa abaixo foi produzida pelo aplicativo para esse nó raiz BB. Não é uma captura de tela de desktop nem a fonte dos valores acima.

Exportação de estratégia da interface gráfica do nó raiz BB capturado
Exportação de estratégia da interface gráfica do nó raiz BB capturado

A captura completa da interface do Direct está em inglês e fornece evidência visual independente do mesmo cálculo vinculado ao CSV. Ela mostra a interface de resultados; os números não foram extraídos dos pixels.

Captura completa em inglês da interface do Direct do nó raiz BB capturado
Captura completa em inglês da interface do Direct do nó raiz BB capturado

O que este exemplo diz — e o que não diz

A configuração define uma aposta de 50% do pote: 2.75 bb nessa raiz. O arredondamento nativo de 1 bb faz a ação real ser BET 3.000000. A raiz também mantém CHECK e BET 97.000000, portanto não é uma árvore de duas ações. A frequência arredondada da terceira ação não deve ser reescrita como “nunca apostar”.

O cálculo usou CPU, customExact, FP32, maxIteration 100, alvo configurado de precisão de 0.5% do pote e isomorfismo. Sua árvore postflop local não deduz rake e não afirma reproduzir o rake GG original. Não há contagem final de iterações nem explorabilidade medida. Os 98.509 segundos observados são limite superior, não medida exata de tempo de resolução; assim, não há alegação de alvo atingido, equilíbrio completo ou conselho geral para outro jogo.

Fluxo de estudo útil

  1. Declare o spot: posições, stacks, ranges, board, tratamento do rake e ações disponíveis.
  2. Identifique nó e estatística: frequência, EV de cada ação, equidade e EV ponderado respondem a perguntas diferentes.
  3. Preserve ações pequenas mesmo quando a tela arredondada mostra zero.
  4. Mude uma hipótese por vez; um novo board ou range é um novo modelo, não uma continuação deste resultado.
  5. Use solver para estudo e prática, nunca como assistência em tempo real em mesas reais.

Entradas e resultados

Este exemplo não é uma recomendação de estratégia. É NLHE 6-max, BB OOP e CO IP, ambos com 100 bb; CO abre 2.5 bb, BB paga e o flop é Qs Th 2d, com pote raiz de 5.5 bb e 97.5 bb restantes. O arquivo JSON de entrada disponível para download mantém os ranges mistos completos: 98 classes BB e 73 classes CO; classes não listadas têm peso 0.

Downloads

Configuração Valor usado
Solver CPU, FP32, customExact
Tamanhos de aposta 50% do pote para os dois jogadores no flop, turn e river; com arredondamento em unidades de 1 bb, a aposta de meio pote no flop passa a ser de 3 bb
Árvore de jogo raiseLimit 1; allinThreshold 0.67; isomorfismo ativado
Condições de parada maxIteration 100; alvo de 0.5% do pote; número de threads automático (-1)

O alvo é uma configuração, não uma prova de convergência. O registro não informa o número final de iterações nem a explorabilidade medida. A raiz conserva CHECK, BET 3.000000 e BET 97.000000; o CSV arredonda a frequência da terceira ação para 0.0000, mas isso não significa que ela seja impossível.

Ranges usados

Estes são os ranges completos de pesos mistos da configuração de entrada salva, formatados para os campos Bulk edit do Direct. As classes e os pesos são preservados com três casas decimais; classes não listadas têm peso 0.

BB fora de posição (98 classes)

22:1.000, 33:1.000, 44:1.000, 55:1.000, 66:0.900, 77:0.965, 88:0.956, 99:0.920, 32s:0.431, 42s:1.000, 43s:0.804, 52s:1.000, 53s:0.873, 54s:0.727, 63s:1.000, 64s:0.711, 65o:0.060, 65s:0.706, 74s:1.000, 75s:0.871, 76o:0.176, 76s:0.665, 84s:0.309, 85s:0.949, 86s:0.916, 87o:0.163, 87s:0.746, 95s:0.387, 96s:0.927, 97s:0.928, 98o:0.271, 98s:0.823, A2s:0.711, A3s:0.735, A4o:0.289, A4s:0.754, A5o:0.815, A5s:0.540, A6s:1.000, A7o:0.849, A7s:1.000, A8o:0.928, A8s:1.000, A9o:0.996, A9s:0.998, AJo:0.937, AJs:0.785, AQo:0.912, ATo:0.951, ATs:0.883, J3s:0.828, J4s:0.885, J5s:0.936, J6s:0.875, J7s:0.731, J8s:0.747, J9o:0.482, J9s:0.334, JJ:0.224, JTo:1.000, JTs:0.384, K2s:0.912, K3s:0.652, K4s:0.747, K5s:0.882, K6o:0.083, K6s:0.921, K7s:0.856, K8o:0.101, K8s:0.995, K9o:0.980, K9s:0.814, KJo:0.779, KJs:0.527, KQo:0.700, KQs:0.913, KTo:0.856, KTs:0.772, Q2s:0.815, Q3s:0.818, Q4s:0.805, Q5s:0.701, Q6s:0.622, Q7s:0.997, Q8s:0.611, Q9o:0.452, Q9s:0.499, QJo:0.906, QJs:0.145, QTo:0.926, QTs:0.577, T6s:0.829, T7s:0.915, T8o:0.057, T8s:0.910, T9o:0.839, T9s:0.265, TT:0.808

CO em posição (73 classes)

22:0.417, 33:0.407, 44:1.000, 55:1.000, 66:1.000, 77:1.000, 88:1.000, 99:1.000, 54s:0.302, 65s:0.401, 76s:0.357, 87s:0.566, 97s:0.623, 98s:1.000, A2s:1.000, A3s:1.000, A4s:1.000, A5o:0.926, A5s:1.000, A6s:1.000, A7o:0.464, A7s:1.000, A8o:1.000, A8s:1.000, A9o:1.000, A9s:1.000, AA:1.000, AJo:1.000, AJs:1.000, AKo:1.000, AKs:1.000, AQo:1.000, AQs:1.000, ATo:1.000, ATs:1.000, J7s:1.000, J8s:1.000, J9o:0.305, J9s:1.000, JJ:1.000, JTo:1.000, JTs:1.000, K3s:1.000, K4s:1.000, K5s:1.000, K6s:1.000, K7s:1.000, K8s:1.000, K9o:0.677, K9s:1.000, KJo:1.000, KJs:1.000, KK:1.000, KQo:1.000, KQs:1.000, KTo:1.000, KTs:1.000, Q5s:1.000, Q6s:1.000, Q7s:1.000, Q8s:1.000, Q9o:0.213, Q9s:1.000, QJo:1.000, QJs:1.000, QQ:1.000, QTo:1.000, QTs:1.000, T7s:0.670, T8s:1.000, T9o:0.160, T9s:1.000, TT:1.000

Use o JSON como referência completa dos parâmetros: no Direct, crie um Custom spot com os valores acima, cole os ranges completos com Bulk edit, escolha a resolução por CPU e compare a saída do nó raiz com o CSV baixado. A versão, o hardware e as condições de parada podem afetar uma repetição exata.

Explorar ranges pré-flop