change alliance to side

This commit is contained in:
Barak Michener 2013-07-27 12:10:28 -04:00
parent e77323d8a1
commit 9f02e5d123

49
tim.py
View file

@ -12,6 +12,13 @@ def ResistanceGame(n_players):
return full_set[:n_players] return full_set[:n_players]
class Player(object):
def __init__(self, id, card, game, side):
self.id_num = id
self.role_str, _ = card
self.game = game
class DeceptionGame(object): class DeceptionGame(object):
def __init__(self, player_array): def __init__(self, player_array):
self.player_array = player_array self.player_array = player_array
@ -21,20 +28,20 @@ class DeceptionGame(object):
self.n_players = len(player_array) self.n_players = len(player_array)
self.model = None self.model = None
self.player_alliance_vars = [] self.player_side_vars = []
self.player_role_vars = [] self.player_role_vars = []
self.role_ids = {} self.role_ids = {}
self.role_alliance = {} self.role_side = {}
i = 0 i = 0
for card in player_array: for card in player_array:
role, good = card role, good = card
self.role_ids[role] = i self.role_ids[role] = i
self.role_alliance[i] = good self.role_side[i] = good
i += 1 i += 1
def player_alliance(x, role): def player_side(x, role):
return self.role_alliance[role] return self.role_side[role]
def player_role(x, deck_var=self.deck_var): def player_role(x, deck_var=self.deck_var):
role_str = self.all_permutations[deck_var][x][0] role_str = self.all_permutations[deck_var][x][0]
@ -50,24 +57,26 @@ class DeceptionGame(object):
plot=False) plot=False)
self.player_role_vars.append(role) self.player_role_vars.append(role)
alliance = mc.Deterministic(eval=functools.partial( side = mc.Deterministic(eval=functools.partial(
player_alliance, x), player_side, x),
name="player_alliance_%d" % x, name="player_side_%d" % x,
parents={"role": role}, parents={"role": role},
doc="Is player %d good?" % x, doc="Is player %d good?" % x,
dtype=bool, dtype=bool,
trace=True, trace=True,
plot=False) plot=False)
self.player_alliance_vars.append(alliance) self.player_side_vars.append(side)
self.players.append(Player(x,
player_array[x]))
self.observations = [] self.observations = []
self.tid = 0 self.tid = 0
def add_known_alliance(self, player_id, is_good): def add_known_side(self, player_id, is_good):
transaction = [] transaction = []
obs = mc.Bernoulli("player_seen_tid%d" % self.tid, obs = mc.Bernoulli("player_seen_tid%d" % self.tid,
self.player_alliance_vars[player_id], self.player_side_vars[player_id],
value=is_good, value=is_good,
observed=True) observed=True)
transaction.append(obs) transaction.append(obs)
@ -100,13 +109,13 @@ class DeceptionGame(object):
def get_player_data(self, i): def get_player_data(self, i):
out = {} out = {}
role_key = "player_role_%d" % i role_key = "player_role_%d" % i
alliance_key = "player_alliance_%d" % i side_key = "player_side_%d" % i
temp_role = self._aggregate(list(self.model.trace(role_key))) temp_role = self._aggregate(list(self.model.trace(role_key)))
out["role"] = {} out["role"] = {}
for k, v in temp_role.iteritems(): for k, v in temp_role.iteritems():
out["role"][self.player_array[int(k)][0]] = v out["role"][self.player_array[int(k)][0]] = v
out["alliance"] = self._aggregate(list(self.model.trace(alliance_key))) out["side"] = self._aggregate(list(self.model.trace(side_key)))
return out return out
def _aggregate(self, l): def _aggregate(self, l):
@ -123,7 +132,7 @@ class DeceptionGame(object):
def _build_model_list(self): def _build_model_list(self):
out = [] out = []
out.append(self.deck_var) out.append(self.deck_var)
out.extend(self.player_alliance_vars[:]) out.extend(self.player_side_vars[:])
out.extend(self.player_role_vars[:]) out.extend(self.player_role_vars[:])
flattened = [item for transaction in self.observations flattened = [item for transaction in self.observations
for item in transaction] for item in transaction]
@ -134,7 +143,7 @@ class DeceptionGame(object):
base_game = DeceptionGame(ResistanceGame(5)) base_game = DeceptionGame(ResistanceGame(5))
base_game.eval(20000) base_game.eval(20000)
base_game.add_known_role(0, "G1") base_game.add_known_role(0, "G1")
base_game.add_known_alliance(1, False) base_game.add_known_side(1, False)
base_game.eval() base_game.eval()
base_game.print_report() base_game.print_report()