change alliance to side
This commit is contained in:
parent
e77323d8a1
commit
9f02e5d123
1 changed files with 29 additions and 20 deletions
39
tim.py
39
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,
|
||||
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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue