Exemple #1
0
    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]])))
Exemple #2
0
 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)
Exemple #3
0
 def test_get_valid_order(self) -> None:
     macid = prisoners_dilemma()
     self.assertEqual(macid.get_valid_order(), ["D2", "D1"])
     rg = RelevanceGraph(macid)
     with self.assertRaises(AttributeError):
         rg.get_valid_order()
         # TODO we're checking that the relevance graph doesn't have a valid order method? why?
     with self.assertRaises(KeyError):
         macid.get_valid_order(["D3"])
Exemple #4
0
 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"}])
Exemple #5
0
 def test_remove_all_decision_rules(self) -> None:
     macid = prisoners_dilemma()
     self.assertTrue(isinstance(macid.get_cpds("D1"), DecisionDomain))
     macid.remove_all_decision_rules()
     self.assertTrue(isinstance(macid.get_cpds("D1"), DecisionDomain))
     macid.impute_fully_mixed_policy_profile()
     self.assertFalse(isinstance(macid.get_cpds("D1"), DecisionDomain))
     macid.remove_all_decision_rules()
     self.assertTrue(isinstance(macid.get_cpds("D1"), DecisionDomain))
     macid_copy = macid.copy_without_cpds()
     with self.assertRaises(ValueError):
         macid_copy.remove_all_decision_rules()
Exemple #6
0
    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)
Exemple #7
0
 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)