def test_story_macid_examples(self) -> None: prisoners_dilemma() battle_of_the_sexes() matching_pennies() taxi_competition() modified_taxi_competition() tree_doctor() forgetful_movie_star() subgame_difference() road_example() politician() umbrella() sequential() signal() triage()
def test_get_all_pure_spe(self) -> None: macid = taxi_competition() all_spe = macid.get_all_pure_spe() self.assertTrue(len(all_spe) == 1) spe = all_spe[0] joint_policy = macid.policy_profile_assignment(spe) cpd_d1 = joint_policy['D1'] cpd_d2 = joint_policy['D2'] self.assertTrue(np.array_equal(cpd_d1.values, np.array([1, 0]))) self.assertTrue( np.array_equal(cpd_d2.values, np.array([[0, 1], [1, 0]]))) macid = modified_taxi_competition() all_spe = macid.get_all_pure_spe() self.assertTrue(len(all_spe) == 2) macid = prisoners_dilemma() all_spe = macid.get_all_pure_spe() self.assertTrue(len(all_spe) == 1) macid = battle_of_the_sexes() all_spe = macid.get_all_pure_spe() self.assertTrue(len(all_spe) == 2) macid3 = basic_different_dec_cardinality() all_spe = macid3.get_all_pure_spe() spe = all_spe[0] joint_policy = macid3.policy_profile_assignment(spe) cpd_d1 = joint_policy['D1'] cpd_d2 = joint_policy['D2'] self.assertTrue(np.array_equal(cpd_d1.values, np.array([0, 1]))) self.assertTrue( np.array_equal(cpd_d2.values, np.array([[0, 0], [1, 0], [0, 1]])))
def test_get_valid_order(self) -> None: macid = prisoners_dilemma() self.assertEqual(macid.get_valid_order(), ['D2', 'D1']) rg = RelevanceGraph(macid) with self.assertRaises(Exception): rg.get_valid_order() with self.assertRaises(Exception): macid.get_valid_order(['D3'])
def test_decs_in_each_maid_subgame(self) -> None: macid = prisoners_dilemma() self.assertCountEqual(macid.decs_in_each_maid_subgame(), [{'D1', 'D2'}]) macid = get_basic_subgames() self.assertTrue(len(macid.decs_in_each_maid_subgame()) == 4) macid = get_basic_subgames3() self.assertTrue(len(macid.decs_in_each_maid_subgame()) == 5)
def test_relevance_graph(self) -> None: example = taxi_competition() rg = RelevanceGraph(example) self.assertTrue(rg.is_acyclic()) example2 = prisoners_dilemma() rg2 = RelevanceGraph(example2) self.assertFalse(rg2.is_acyclic()) self.assertTrue(len(rg.get_sccs()) == 2) self.assertEqual(rg2.get_sccs(), [{'D1', 'D2'}])
def test_expected_utility(self) -> None: three_node = get_3node_cid() five_node = get_5node_cid() eu00 = three_node.expected_utility({'D': -1, 'S': -1}) self.assertEqual(eu00, 1) eu10 = three_node.expected_utility({'D': 1, 'S': -1}) self.assertEqual(eu10, -1) eu000 = five_node.expected_utility({'D': 0, 'S1': 0, 'S2': 0}) self.assertEqual(eu000, 2) eu001 = five_node.expected_utility({'D': 0, 'S1': 0, 'S2': 1}) self.assertEqual(eu001, 1) macid_example = prisoners_dilemma() eu_agent0 = macid_example.expected_utility({'D1': 'd', 'D2': 'c'}, agent=1) self.assertEqual(eu_agent0, 0) eu_agent1 = macid_example.expected_utility({'D1': 'd', 'D2': 'c'}, agent=2) self.assertEqual(eu_agent1, -3)
def test_get_all_pure_ne(self) -> None: macid = prisoners_dilemma() self.assertEqual(len(macid.get_all_pure_ne()), 1) pne = macid.get_all_pure_ne()[0] macid.add_cpds(*pne) self.assertEqual(macid.expected_utility({}, agent=1), -2) self.assertEqual(macid.expected_utility({}, agent=2), -2) macid2 = battle_of_the_sexes() self.assertEqual(len(macid2.get_all_pure_ne()), 2) macid3 = matching_pennies() self.assertEqual(len(macid3.get_all_pure_ne()), 0) macid4 = two_agents_three_actions() self.assertEqual(len(macid4.get_all_pure_ne()), 1)