Example #1
0
	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])
Example #3
0
	def probability(self, profile):
		return prod((self ** profile).flat) * profile.reps