def it_stops_sampling_when_the_new_equilibria_are_all_similar(self): Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: \ array([0.110001, 0.899999]) if list(mix) == [0.11, 0.89] else array([0.9999, 0.0001]) matrix = create_observation_matrix() evaluator = EquilibriumCompareEvaluator(0.05) evaluator.old_equilibria = [array([0.11, 0.89]), array([1.0, 0.0])] assert evaluator.continue_sampling(matrix) == False
def it_requests_sampling_when_delta_is_in_interval(self): class FakeCI: def two_sided_interval(self, matrix, profile, alpha): return [0.0, 1.0] ci_calculator = FakeCI() matrix = create_observation_matrix() evaluator = ConfidenceIntervalEvaluator(matrix.toGame(), matrix.knownProfiles(), 0.5, 0.95, ci_calculator) assert evaluator.continue_sampling(matrix) == True
def it_requests_further_sampling_when_new_equilibria_are_found(self): Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: \ array([0.1, 0.9]) if mix is array([0.11, 0.89]) else array([0.999, 0.001]) matrix = create_observation_matrix() evaluator = EquilibriumCompareEvaluator(0.05) evaluator.old_equilibria = [array([0.11, 0.89])] assert evaluator.continue_sampling(matrix) == True for eq in evaluator.old_equilibria: assert [[0.1, 0.9], [0.999, 0.001]].count(list(eq)) == 1
def it_does_not_request_sampling_when_delta_is_outside_all_intervals(self): class FakeCI: def __init__(self): self.count = 0 def two_sided_interval(self, matrix, profile, alpha): self.count += 1 if self.count % 2 == 0: return [0.6, 1.0] else: return [0.0, 0.4] ci_calculator = FakeCI() matrix = create_observation_matrix() evaluator = ConfidenceIntervalEvaluator(matrix.toGame(), matrix.knownProfiles(), 0.5, 0.95, ci_calculator) assert evaluator.continue_sampling(matrix) == False
def it_tracks_whether_or_not_a_profile_is_a_delta_nash(self): class FakeCI: def __init__(self): self.count = 0 def two_sided_interval(self, matrix, profile, alpha): self.count += 1 if self.count % 2 == 0: return [0.6, 1.0] else: return [0.0, 0.4] ci_calculator = FakeCI() matrix = create_observation_matrix() evaluator = ConfidenceIntervalEvaluator(matrix.toGame(), matrix.knownProfiles(), 0.5, 0.95, ci_calculator) evaluator.continue_sampling(matrix) count = 0 print evaluator.target_hash.items() for result in evaluator.target_hash.values(): count += 1 if count % 2 == 0: assert result == "No" else: assert result == "Yes"
def it_requests_further_sampling_when_the_new_equilibrium_is_distant(self): Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: array([0.1, 0.9]) matrix = create_observation_matrix() evaluator = EquilibriumCompareEvaluator(0.01) evaluator.old_equilibria = [array([0.5, 0.5])] assert evaluator.continue_sampling(matrix) == True
def it_requests_further_sampling_when_there_is_data_but_no_old_equilibria(self): Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: array([0.1, 0.9]) matrix = create_observation_matrix() evaluator = EquilibriumCompareEvaluator(0.01) assert evaluator.continue_sampling(matrix) == True assert_array_almost_equal(evaluator.old_equilibria[0], array([0.1, 0.9]))