03 “Dual” game
Dual game is defined as follows: For a subset \(S\) of all players \(P\), \(S \subseteq P\).
\[ \tilde{v}(S) = v(P) - v(S), \]
Using dual games, one defines “peel-off” Harsanyi dividends as Harsanyi dividends of the dual game.
The Shapley values of the dual game are the same as Shapley values of the original game.
from shapley_numba.common import subsets
from shapley_numba.examples import GloveGame
from shapley_numba.tools import dual_game
num_players = 5
glove_game = GloveGame(2)
dual_glove_game = dual_game(glove_game, num_players)
for subset in subsets(num_players):
print(subset, glove_game.value(subset), dual_glove_game.value(subset))
[0 0 0 0 0] 0.0 0.0
[1 0 0 0 0] 0.0 1.0
[0 1 0 0 0] 0.0 1.0
[1 1 0 0 0] 0.0 2.0
[0 0 1 0 0] 0.0 0.0
[1 0 1 0 0] 1.0 1.0
[0 1 1 0 0] 1.0 1.0
[1 1 1 0 0] 1.0 2.0
[0 0 0 1 0] 0.0 0.0
[1 0 0 1 0] 1.0 1.0
[0 1 0 1 0] 1.0 1.0
[1 1 0 1 0] 1.0 2.0
[0 0 1 1 0] 0.0 1.0
[1 0 1 1 0] 1.0 1.0
[0 1 1 1 0] 1.0 1.0
[1 1 1 1 0] 2.0 2.0
[0 0 0 0 1] 0.0 0.0
[1 0 0 0 1] 1.0 1.0
[0 1 0 0 1] 1.0 1.0
[1 1 0 0 1] 1.0 2.0
[0 0 1 0 1] 0.0 1.0
[1 0 1 0 1] 1.0 1.0
[0 1 1 0 1] 1.0 1.0
[1 1 1 0 1] 2.0 2.0
[0 0 0 1 1] 0.0 1.0
[1 0 0 1 1] 1.0 1.0
[0 1 0 1 1] 1.0 1.0
[1 1 0 1 1] 2.0 2.0
[0 0 1 1 1] 0.0 2.0
[1 0 1 1 1] 1.0 2.0
[0 1 1 1 1] 1.0 2.0
[1 1 1 1 1] 2.0 2.0
num_players = 3
glove_game = GloveGame(1)
dual_glove_game = dual_game(glove_game, num_players)
for subset in subsets(3):
print(subset, glove_game.value(subset), dual_glove_game.value(subset))
[0 0 0] 0.0 0.0
[1 0 0] 0.0 1.0
[0 1 0] 0.0 0.0
[1 1 0] 1.0 1.0
[0 0 1] 0.0 0.0
[1 0 1] 1.0 1.0
[0 1 1] 0.0 1.0
[1 1 1] 1.0 1.0