Implementação da teoria algorítmica dos jogos em Python com Nashpy

A teoria dos jogos é um método de estudar situações estratégicas em que os resultados dependem não apenas de suas ações, mas também do que os outros farão.

O que é uma situação estratégica? Lembre-se dos tipos de estruturas de mercado: existe uma concorrência perfeita quando todas as empresas estão precificando, ou seja, elas não precisam se preocupar com uma estratégia de precificação, e existe um monopólio quando há apenas uma empresa no mercado que define seus preços. Então: tudo entre concorrência perfeita e monopólio é uma situação estratégica.

A teoria algorítmica dos jogos está na junção da teoria dos jogos e da ciência da computação e tem como objetivo estudar e criar algoritmos para estratégias.



Sob o gato, uma pequena história sobre como você pode usar a teoria dos jogos em Python usando a biblioteca Nashpy.


Do editor: Por que de repente nos lembramos da teoria dos jogos? Tudo é simples - atualizando continuamente nossa plataforma com 900 mil participantes, estamos constantemente diante de situações em que várias estratégias precisam ser desenvolvidas. Por exemplo, no portal de especialistas da NTI: confirme todos em fila ou, inversamente, não confirme ninguém, mas peça apenas confirmação. Outro exemplo: nos Pontos de Ebulição, uma luta por recursos é observada regularmente e existem dilemas - pedimos todo o equipamento de uma só vez, escrevemos números reais para o número de participantes ou superestimamos? Além disso, a solução desses problemas deve ser realizada com o máximo benefício para todos.

Nashpy


Como o nome sugere, a biblioteca fornece recursos algorítmicos para alcançar o equilíbrio de Nash - um conjunto de estratégias para dois jogadores, quando cada um deles escolhe a versão mais ideal de seu comportamento com base em um cenário semelhante para o segundo jogador. Remotamente, assemelha-se ao princípio de ganha-ganha, mas com uma orientação para perdas mínimas em qualquer situação.

Para entender esse conceito, passemos ao modelo popular “ Dilema do Prisioneiro ”.

Se render ou não se render


Existem dois jogadores (prisioneiros) que devem decidir se cooperam entre si sem dar outro nome durante o interrogatório da polícia. A utilidade desse comportamento será estimada em três pontos para cada jogador, se ambos escolherem esse caminho. O ponto de partida aqui é a punição: se os jogadores se entregarem, eles podem ser acusados ​​de "ação de conspiração", isto é, "banditismo", e a punição por eles nesse caso será mais severa do que se eles agissem separadamente.

Se um jogador passa no outro (desde que ele não passe), a utilidade para ele será de quatro pontos, para o outro jogador - zero pontos. Se os prisioneiros se renderem, a utilidade será de um ponto por irmão.

Para facilitar a apresentação desse conjunto de opções, coloque-as em um prato, onde, nas celas, indique o número de pontos para cada prisioneiro, dependendo da escolha feita:


P1 - jogador 1, P2 - jogador 2, C - cooperação, NC - um jogador passou por outro

No final, a melhor opção para ambos é entregar um ao outro.

Por que os prisioneiros não colaboram? Considere a estratégia do jogador 1 (P1):
  • se o jogador 2 (P2) decide cooperar com P1, a melhor estratégia para P1 é entregar o jogador P2, já que 4> 3
  • se P2 decide entregar P1, então P1 é mais lucrativo para jogar P2, pois 1> 0


Portanto, a estratégia vencedora para P1 é (NC; NC), o que também é válido para P2. Assim, o equilíbrio de Nash será a estratégia (NC; NC) quando os jogadores P1 e P2 se renderem à polícia.

Transferimos a teoria para Python


Primeiro você precisa instalar o módulo. Isso pode ser feito pela equipe pip install nashpyatravés do console do Jupyter. No final da instalação, você pode começar a definir as condições do jogo. Para dois jogadores com um resultado diferente de zero (que é o valor padrão no Nashpy), é necessário criar duas matrizes que refletem as situações de jogo para cada jogador. Por exemplo, para o jogador 1, a matriz ficará assim:

C
NC
C
3
0 0
NC
4
1 1


Para o jogador 2, assim:

C
NC
C
3
4
NC
0 0
1 1


Vamos reproduzir isso em Python:

import nashpy as nash
import numpy as ns
P1=np.array([[3,0],[4,1]])
P2=np.array([[3,4],[0,1]])
prisoner_dilemma=nash.Game(P1,P2)

prisoner_dilemma




Olhando para estas placas, podemos obter uma estimativa da utilidade da interação dos jogadores. Ou seja, se P1 não der P2 e P2 der P1, os valores da utilidade serão (0, 4). Podemos obter o mesmo com os cálculos matriciais em Nashphy. Tomamos um vetor de ações como um sigma (temos dois deles: colaborar ou entregar outro prisioneiro), onde o valor 0 é atribuído a todas as células, exceto aquele em que a ação ocorre. Então, para o jogador 1, a utilidade da ação será calculada como:



Para o jogador 2:



aplicando a fórmula ao cenário, quando o jogador 1 escolhe uma estratégia para cooperação com outro jogador e o jogador 2 decide entregar o jogador 1, obtemos:



Verifique com Nashpy:





descubra se ele encontra um algoritmo O equilíbrio de Nash, que, como já descobrimos, é (NC; NC):





Como você pode ver, o equilíbrio de Nash consiste em dois vetores, cada um dos quais reflete as ações de um jogador: para o jogador 1, este é [0; 1], onde 1 no segundo campo significa que o jogador 1 decidiu entregar o jogador 2. Vemos uma imagem semelhante para o segundo jogador.

PS o que pode ser lido em


  1. A Teoria dos Jogos (Avinash Dixit e Barry Neilbuff) é uma publicação relativamente recente da MYTH Publishing House. No livro, com exemplos de cinema, esportes, política e história, os autores mostram como quase todas as empresas e pessoas estão envolvidas em interações descritas pela teoria dos jogos.
  2. Estratégia de Conflitos (Thomas Schelling). O livro é dedicado ao estudo da lógica geral do comportamento dos participantes em situações de conflito - teoria dos jogos. Lançado em 1960, tornou-se uma contribuição fundamental para essa ciência, lançando os fundamentos da teoria do comportamento estratégico.
  3. Pedra, papel e tesoura: teoria dos jogos na vida cotidiana (Len Fisher) é outro livro sobre a ciência da colaboração. Fisher mostra como a teoria dos jogos ajudou os biólogos a entender a evolução da colaboração na natureza e como podemos aplicá-la em nossa sociedade.

Source: https://habr.com/ru/post/undefined/


All Articles