def __init__(self, roles=[], players={}, strategies={}, payoff_data=[]): """ Role-symmetric game representation. __init__ parameters: roles: collection of role-name strings players: mapping from roles to number of players per role strategies: mapping from roles to per-role strategy sets payoff_data: collection of data objects mapping roles to collections of (strategy, count, value) tuples """ self.roles = sorted(set(map(str, roles))) self.players = h_dict({r : int(players[r]) for r in self.roles}) self.strategies = h_dict({r : tuple(sorted(set(map(str, \ strategies[r])))) for r in self.roles}) self.numStrategies = [len(self.strategies[r]) for r in self.roles] self.maxStrategies = max(self.numStrategies) self.minPayoffs = self.zeros(dtype=float, masked=False) self.minPayoffs.fill(float('inf')) self.mask = np.array([[False]*s + [True]*(self.maxStrategies - s) for \ s in self.numStrategies]) self.size = prod([game_size(self.players[r], self.numStrategies[ \ i]) for i,r in enumerate(self.roles)]) self.role_index = {r:i for i,r in enumerate(self.roles)} self.strategy_index = {r : {s:i for i,s in enumerate( \ self.strategies[r]) } for r in self.roles} self.values = [] self.counts = [] self.dev_reps = [] for profile_data_set in payoff_data: self.addProfile(profile_data_set)
def singleSample(self): """Makes self.values be a single sample from each sample set.""" if self.max_samples == self.min_samples: self.makeArrays() vals = self.sample_values.reshape([prod(self.values.shape), \ self.max_samples]) self.values = np.array(map(choice, vals)).reshape(self.values.shape) else: self.values = np.array([[[choice(s) for s in r] for r in p] for \ p in self.sample_values])
def probability(self, profile): return prod((self ** profile).flat) * profile.reps