International Essays |
Um Jogo Totalmente Novo: Teoria dos Jogos com a Wolfram Language 14.2
Um Jogo Totalmente Novo: Teoria dos Jogos com a Wolfram Language 14.2
25 de fevereiro de 2025
Marc Vicuna, Desenvolvedor de Kernel, P&D de Algoritmos
Você gostaria de tomar decisões certeiras diante da concorrência? Ou analisar contextos competitivos e prever os resultados de eventos competitivos? Precisa elaborar estratégias e planos diante da adversidade e testar a eficácia dessas estratégias? Ou você é um universitário tentando lidar com uma disciplina obrigatória de teoria dos jogos?
O novo conjunto de funções de teoria dos jogos da Wolfram permitirá que você gere, explore, teste, resolva e visualize qualquer evento usando teoria dos jogos.
História da Teoria dos Jogos Originalmente, a teoria dos jogos se restringia a simples jogos de azar. Esses jogos compartilham algumas características: apenas dois jogadores participam por vez e ou um jogador ganha e o outro perde, ou ambos recebem um resultado nulo. Esses jogos são hoje conhecidos como jogos de soma zero entre dois jogadores.
Se definirmos a teoria dos jogos com base na elaboração de estratégias ideais, ela pode ser tão antiga quanto os próprios jogos de azar. Devemos essa análise inicial (e a teoria das probabilidades!) ao famoso polímata e apostador, Girolamo Cardano. Por outro lado, se a definirmos como a análise de jogos baseada nas possíveis ações de todos os jogadores, então suas origens podem ser atribuídas a James Waldegrave, pela análise do jogo Le Her em 1713, na qual foram apresentadas soluções de estratégia minimax.
Claro que os jogos podem ir além do entretenimento. Afinal, poucos jogos podem afirmar ter uma base de jogadores tão grande quanto o jogo da economia. Antoine-Augustin Cournot, em sua pesquisa de 1838 sobre os princípios matemáticos da teoria da riqueza (Recherches sur les principes mathématiques de la théorie des richesses), descobriu soluções para a competição de preços que mais tarde seriam chamadas de equilíbrios de Nash.
Entretanto, a maioria dessas descobertas é algo isolada e geralmente considerada apenas como precursora do campo moderno. A teoria dos jogos começa oficialmente com o livro Theory of Games and Economic Behavior, de John von Neumann, publicado em 1944, no qual o termo “teoria dos jogos” foi cunhado e os axiomas da área foram estabelecidos, dando origem a um novo campo próprio. Esta visão geral da história da teoria dos jogos não estaria completa sem mencionar John Nash, cujo teorema de existência dos equilíbrios de Nash transformou a teoria dos jogos poucos anos depois, em 1950.
Como você pode imaginar, esse campo de estudo cresceu imensamente desde então. A teoria moderna dos jogos pode ser resumida como a matemática da tomada de decisões. Em sua essência, estuda o comportamento de jogadores humanos, animais e artificiais em todas as formas de competição. Herbert Gintis expressou isso da melhor forma:
“A teoria dos jogos trata tanto de como as pessoas cooperam quanto de como competem... A teoria dos jogos trata do surgimento, da transformação, da difusão e da estabilização de formas de comportamento.”
Jogos de Matriz: Gato e Rato Jogos de matriz também são conhecidos como jogos simultâneos. De fato, esses jogos se caracterizam pela simultaneidade das ações de todos os jogadores. Como o nome sugere, os jogos de matriz são baseados em matrizes. Para ser mais preciso, qualquer jogo de matriz com n jogadores pode ser expresso por uma matriz de n + 1 dimensões, em que a última dimensão é um vetor com os resultados para todos os jogadores.
Jogos de matriz podem ser gerados usando a nova função na Versão 14.2. Por exemplo, aqui está um jogo entre dois jogadores, em que cada um tem a opção de duas ações:
game=MatrixGame[{{1,-1},{-1,1}}]
Out[]=
MatrixGame
Este é um jogo de soma zero, como pode ser visto no que representa os resultados de cada jogador:
game["Dataset"]
Out[]=
|
Usamos um resultado de 1 para representar vitória e um resultado de –1 para representar derrota. Assim, neste jogo, o primeiro jogador vence quando as ações de ambos os jogadores coincidem, e o segundo jogador vence quando as ações não coincidem.
Embora jogos simultâneos geralmente sejam expressos em termos de matrizes, estas rapidamente se tornam difíceis de interpretar à medida que o número de jogadores e ações aumentam. Por isso, nossa equipe desenvolveu a função para visualizar essa classe de jogos:
MatrixGamePlot[game]
Out[]=
MatrixGamePlot e outras funções são concebidas para funcionar com jogos com qualquer número de jogadores. Você pode achar que o layout "SplitSquare” é mais intuitivo para jogos com dois jogadores, enquanto jogos com mais de dois jogadores são melhor visualizados com o layout padrão "BarChart":
{MatrixGamePlot[game,PlotLayout->"SplitSquare"],MatrixGamePlot[game,PlotLayout->"BarChart"]}
Out[]=
,
Por melhores que essas visualizações possam ser, é difícil inferir a história por trás do jogo apenas a partir de visualiações gerais. Para facilitar a interpretação, considere dois jogadores: um gato e um rato. O gato pode procurar pela casa ou pelo quintal, e o rato pode se esconder na casa ou no quintal. Naturalmente, o gato vence se estiver no mesmo lugar que o rato; caso contrário, o rato vence.
O conjunto de dados e o gráfico da versão gato-e-rato do jogo podem ser mais facilmente interpretados especificando GamePlayerLabels e GameActionLabels nesse jogo:
In[]:=
CatAndMouse=MatrixGame{{1,-1},{-1,1}},;
{CatAndMouse["Dataset"],CatAndMouse["Plot"]}
Out[]=
,
|
Podemos afirmar que gatos são preguiçosos. É bem provável que o nosso gato seja sedentário demais para sair de casa (🏠) por causa de um simples rato. Sabendo disso, um rato oportunista deveria sempre escolher ir para o quintal (🌿), já que isso deve levar a um resultado melhor. Para verificar isso, o rato pode usar nesse jogo e estratégia, o que permite calcular os resultados esperados com base em uma estratégia escolhida:
MatrixGamePayoff[game,{{1,0},{0,1}}]
Out[]=
{-1,1}
Mas e se o gato não for preguiçoso? Alguns gatos têm aqueles olhos místicos, imprevisíveis com uma expressão impossível de decifrar. Para o rato, parece que esse gato fará o que for necessário para vencer. O rato precisa repensar sua estratégia, torná-la estável e sólida, garantindo que ele tenha, no mínimo, as mesmas chances de vitória que o gato. O rato usa para testar todas as estratégias em que cada animal escolhe entre a casa e o quintal, e verificar se uma estratégia em particular é um equilíbrio de Nash. Infelizmente, parece que todos os casos são instáveis, e o gato pode ter vantagem:
Table[VerifyMatrixGameStrategy[game,{{cat,1-cat},{mouse,1-mouse}}],{cat,0,1},{mouse,0,1}]
Out[]=
{{False,False},{False,False}}
Nosso rato tem uma última carta na manga: ! ssa função poderosa resolve o jogo, calculando equilíbrios de Nash, ou seja, estratégias que nenhum dos jogadores tem interesse em alterar. Usando essa ferramenta, o rato percebe que sua salvação está na aleatoriedade:
FindMatrixGameStrategies[game]
Essa é uma estratégia mista, onde a probabilidade de certas ações não é 0 nem 1. Nesse caso, o rato precisará jogar uma moeda: cara, fica na casa; coroa, vai para o quintal. Observe que o gato não consegue tirar proveito dessa estratégia, então a melhor estratégia dele também é 50/50.
Admito que o jogo até aqui é um pouco irrealista. É provável que o rato tenha muitos outros lugares para se esconder, e o gato muitos outros lugares para procurar. Isso implicaria para cada jogador mais de duas ações, e de fato existem jogos assim. Por exemplo, no jogo Morra, cada jogador tem 50 ações possíveis. Todos os recursos mencionados anteriormente são generalizáveis para esse ou qualquer número de ações:
Claro, não é exatamente uma festa quando apenas dois jogadores participam por vez. Também é possível especificar jogos matriciais como o El Farol Bar com qualquer número de jogadores — embora eu não desejasse tantos ratos nem para o meu pior inimigo:
Se a colônia se rebelar, o país pode optar por conceder independência ou suprimir a rebelião. Como perder uma colônia é custoso, o país sempre terá mais interesse em suprimir a rebelião — como pode ser verificado comparando o segundo resultado de cada desfecho:
Mesmo considerando apenas a teoria dos jogos, é evidente que o país está em vantagem nesse jogo. Com frequência, em jogos em árvore, o jogador que atua por último leva vantagem, pois escolhe diretamente o resultado. Neste caso, qualquer que seja a decisão da colônia, o país consegue garantir um resultado positivo simplesmente escolhendo suprimir ou taxar, conforme a ação tomada pela colônia:
Claro que os jogos em árvore não se limitam a apenas duas ações consecutivas. Por exemplo, considere este jogo chamado Centipede, cujo nome ainda é um mistério para mim:
Jogos em árvore também não se limitam a dois jogadores. Por exemplo, considere um jogo de herança, no qual acompanhamos o destino do cacto dourado herdado do avô Zubair por toda a sua família:
Acontece que é bem difícil entender o significado e a utilidade de um jogo apenas olhando para uma lista de resultados (payoffs). Como cada jogo tem sua própria história, origem, peculiaridades e propriedades, quisemos permitir que os usuários explorem toda a riqueza da teoria dos jogos com exemplos bem curados, diretamente na linguagem. Assim, cada jogo inclui recursos práticos que permitem a qualquer pessoa compreendê-lo, estudá-lo e caracterizá-lo. Você pode acessar uma descrição textual do jogo:
Conhecer suas origens na literatura:
Ver a quais classes de jogos ele pertence:
E, claro, interagir com ele visualmente:
Na verdade, colocamos muito esforço na documentação dessas funções. A quantidade de exemplos, explicações e a atenção até aos menores detalhes vai muito além do que normalmente se espera para novas funcionalidades em um lançamento. Esse nível de documentação deve permitir que você comece a aprender teoria dos jogos em questão de minutos:
Todos esses recursos estão disponíveis em um só lugar , para que os usuários tenham uma visão completa das funcionalidades:
Game Over
Nossas funcionalidades atuais de teoria dos jogos foram pensadas especialmente para quem está aprendendo, mais do que para outros públicos. Mas não se preocupe — não vamos declarar “game over” tão cedo. Temos muitas ideias para o futuro do pacote de teoria dos jogos da Wolfram. Sabemos que os recursos da Wolfram só estão completos quando são altamente generalizáveis. Pode levar algum tempo, mas esperamos que a generalização das funções atuais amplie bastante sua aplicabilidade em contextos de pesquisa e uso profissional. E o mais importante: adoraríamos receber feedback sobre o que você gostaria de ver na próxima geração desses recursos.
Nossas funcionalidades atuais de teoria dos jogos foram pensadas especialmente para quem está aprendendo, mais do que para outros públicos. Mas não se preocupe — não vamos declarar “game over” tão cedo. Temos muitas ideias para o futuro do pacote de teoria dos jogos da Wolfram. Sabemos que os recursos da Wolfram só estão completos quando são altamente generalizáveis. Pode levar algum tempo, mas esperamos que a generalização das funções atuais amplie bastante sua aplicabilidade em contextos de pesquisa e uso profissional. E o mais importante: adoraríamos receber feedback sobre o que você gostaria de ver na próxima geração desses recursos.
Não fique de fora do jogo — experimente essas novas funcionalidades por conta própria!