diff --git a/tim.py b/tim.py index e412f28..2186879 100644 --- a/tim.py +++ b/tim.py @@ -12,6 +12,13 @@ def ResistanceGame(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): def __init__(self, player_array): self.player_array = player_array @@ -21,20 +28,20 @@ class DeceptionGame(object): self.n_players = len(player_array) self.model = None - self.player_alliance_vars = [] + self.player_side_vars = [] self.player_role_vars = [] self.role_ids = {} - self.role_alliance = {} + self.role_side = {} i = 0 for card in player_array: role, good = card self.role_ids[role] = i - self.role_alliance[i] = good + self.role_side[i] = good i += 1 - def player_alliance(x, role): - return self.role_alliance[role] + def player_side(x, role): + return self.role_side[role] def player_role(x, deck_var=self.deck_var): role_str = self.all_permutations[deck_var][x][0] @@ -50,24 +57,26 @@ class DeceptionGame(object): plot=False) self.player_role_vars.append(role) - alliance = mc.Deterministic(eval=functools.partial( - player_alliance, x), - name="player_alliance_%d" % x, - parents={"role": role}, - doc="Is player %d good?" % x, - dtype=bool, - trace=True, - plot=False) + side = mc.Deterministic(eval=functools.partial( + player_side, x), + name="player_side_%d" % x, + parents={"role": role}, + doc="Is player %d good?" % x, + dtype=bool, + trace=True, + 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.tid = 0 - def add_known_alliance(self, player_id, is_good): + def add_known_side(self, player_id, is_good): transaction = [] obs = mc.Bernoulli("player_seen_tid%d" % self.tid, - self.player_alliance_vars[player_id], + self.player_side_vars[player_id], value=is_good, observed=True) transaction.append(obs) @@ -100,13 +109,13 @@ class DeceptionGame(object): def get_player_data(self, i): out = {} 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))) out["role"] = {} for k, v in temp_role.iteritems(): 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 def _aggregate(self, l): @@ -123,7 +132,7 @@ class DeceptionGame(object): def _build_model_list(self): out = [] out.append(self.deck_var) - out.extend(self.player_alliance_vars[:]) + out.extend(self.player_side_vars[:]) out.extend(self.player_role_vars[:]) flattened = [item for transaction in self.observations for item in transaction] @@ -134,7 +143,7 @@ class DeceptionGame(object): base_game = DeceptionGame(ResistanceGame(5)) base_game.eval(20000) 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.print_report()