Calcoli scientifici con Julia/Teoria dei giochi

Esempio 1: Supermercati aperti la domenica

modifica

Supponiamo che vi siano 2 supermercati che devono decidere se aprire la domenica oppure no. Se entrambi i supermercati non aprono guadagnano 150 e 250, se aprono guadagnano 200 e 300, se il primo non apre e il secondo si, quest'ultimo guadagna 350 mentre l'altro 100, se il secondo non apre e il primo si, quest'ultimo guadagna 250 mentre l'altro 200 . Si ottiene in tal modo la matrice dei payoff che utilizzando la libreria GameTheory di Julia si può memorizzare così:

using GameTheory

g = NormalFormGame((2, 2))  
g[1, 1] = [200, 300]
g[1, 2] = [250, 200]
g[2, 1] = [100, 350]
g[2, 2] = [150, 250];
print(g)
2×2 NormalFormGame{2, Float64}:
[200.0, 300.0]  [250.0, 200.0]
[100.0, 350.0]  [150.0, 250.0]

Volendo trovare gli eventuali equilibri di Nash si utilizza in julia :

pure_nash(g)
1-element Vector{Tuple{Int64, Int64}}:
(1, 1)

Quindi vi è un solo equilibrio di Nash contenuto nella cella (1,1) pari a [200, 300], pertanto è conveniente che entrambi i supermercati restino aperti di domenica.

Esempio 2: Prezzi bassi o alti

modifica

Supponiamo che 2 aziende producano un bene in regime di duopolio e devono decidere se venderlo a prezzo alto o basso. Se entrambe lo vendono a prezzo alto, guadagnano 6, se entrambe lo vendono a prezzo basso guadagnano 2, se la prima lo vende a prezzo alto e la seconda a prezzo basso, quest'ultima guadagna 9 mentre l'altra 0, se la seconda lo vende a prezzo alto e la prima basso, quest'ultima guadagna 9 mentre l'altra 0 . Si ottiene in tal modo la matrice dei payoff che utilizzando la libreria GameTheory di Julia si può memorizzare così:

using GameTheory

g = NormalFormGame((2, 2))  
g[1, 1] = [6, 6]
g[1, 2] = [0, 9]
g[2, 1] = [9, 0]
g[2, 2] = [2, 2];
print(g)
2×2 NormalFormGame{2, Float64}:
[6.0, 6.0]  [0.0, 9.0]
[9.0, 0.0]  [2.0, 2.0]

Volendo trovare gli eventuali equilibri di Nash si utilizza in julia :

pure_nash(g)
1-element Vector{Tuple{Int64, Int64}}:
(2, 2)

Quindi vi è un solo equilibrio di Nash contenuto nella cella (2,2) pari a [2, 2], pertanto è conveniente che entrambe le aziende vendano a prezzi bassi.

Esempio 3

modifica

Nel caso in cui un gioco sia rappresentato dalla seguente matrice di payoff :

g2 = NormalFormGame((3, 2))  
g2[1, 1] = [3, 3]
g2[1, 2] = [3, 2]
g2[2, 1] = [2, 2]
g2[2, 2] = [5, 6];
g2[3, 1] = [0, 3]
g2[3, 2] = [0, 1];
print(g2)
3×2 NormalFormGame{2, Float64}:
[3.0, 3.0]  [3.0, 2.0]
[2.0, 2.0]  [5.0, 6.0]
[0.0, 3.0]  [0.0, 1.0]

Si trovano 2 equilibri di Nash :

pure_nash(g2)
2-element Vector{Tuple{Int64, Int64}}:
(1, 1)
(2, 2)

...cioè [3.0, 3.0] e [5.0, 6.0] ...

Ulteriori esempi dell'utilizzo di Julia nella teoria dei giochi si trovano nel tutorial: https://nbviewer.org/github/QuantEcon/game-theory-notebooks/blob/main/game_theory_jl.ipynb .