class TestMPE(unittest.TestCase): """ Test cases for Most Probable Explanation(MPE) """ def setUp(self): self.Net = BayesNet() network_structure = { "node1" : { "state1" : 0.3, "state2" : 0.7, }, "node2" : { "state1" : 0.7, "state2" : 0.3, }, "node3" : { "state1" : 0.5, "state2" : 0.5 }, } self.Net.create_network(network_structure) def test_MPE_connected(self): """ testing Net.getMPE(NodeName1,NodeName2) between parent and child node(i.e. connected nodes) """ self.Net.createEdge("node1",["node2","node3"]) node1 = self.Net.getNode("node1") node2 = self.Net.getNode("node2") node3 = self.Net.getNode("node3") self.Net.setProbability(node2,["state1", 'state1'],0.3) self.Net.setProbability(node2,["state1", 'state2'],0.1) self.Net.setProbability(node2,["state2", 'state1'],0.7) self.Net.setProbability(node2,["state2", 'state2'],0.9) self.Net.setProbability(node3,["state1", 'state1'],0.4) self.Net.setProbability(node3,["state1", 'state2'],0.0) self.Net.setProbability(node3,["state2", 'state1'],0.6) self.Net.setProbability(node3,["state2", 'state2'],1.0) expected_outcome = {'node1': 'state2', 'node2': 'state2'} mpe = self.Net.getMPE("node1","node2") self.assertDictEqual(expected_outcome,mpe) def test_MPE_disconnected(self): """ testing Net.getMPE(NodeName1,NodeName2) between disconnected nodes """ self.Net.createEdge(["node1","node2"],"node3") node1 = self.Net.getNode("node1") node2 = self.Net.getNode("node2") node3 = self.Net.getNode("node3") self.Net.setProbability(node3,["state1", 'state1','state1'],0.3) self.Net.setProbability(node3,["state1", 'state1','state2'],0.1) self.Net.setProbability(node3,["state1", 'state2','state1'],0.5) self.Net.setProbability(node3,["state1", 'state2','state2'],0.7) self.Net.setProbability(node3,["state2", 'state1','state1'],0.7) self.Net.setProbability(node3,["state2", 'state1','state2'],0.9) self.Net.setProbability(node3,["state2", 'state2','state1'],0.5) self.Net.setProbability(node3,["state2", 'state2','state2'],0.3) expected_outcome = {'node1': 'state2', 'node2': 'state1'} mpe = self.Net.getMPE("node1","node2") self.assertDictEqual(expected_outcome,mpe)
class TestMPE(unittest.TestCase): """ Test cases for Most Probable Explanation(MPE) """ def setUp(self): self.Net = BayesNet() network_structure = { "node1": { "state1": 0.3, "state2": 0.7, }, "node2": { "state1": 0.7, "state2": 0.3, }, "node3": { "state1": 0.5, "state2": 0.5 }, } self.Net.create_network(network_structure) def test_MPE_connected(self): """ testing Net.getMPE(NodeName1,NodeName2) between parent and child node(i.e. connected nodes) """ self.Net.createEdge("node1", ["node2", "node3"]) node1 = self.Net.getNode("node1") node2 = self.Net.getNode("node2") node3 = self.Net.getNode("node3") self.Net.setProbability(node2, ["state1", 'state1'], 0.3) self.Net.setProbability(node2, ["state1", 'state2'], 0.1) self.Net.setProbability(node2, ["state2", 'state1'], 0.7) self.Net.setProbability(node2, ["state2", 'state2'], 0.9) self.Net.setProbability(node3, ["state1", 'state1'], 0.4) self.Net.setProbability(node3, ["state1", 'state2'], 0.0) self.Net.setProbability(node3, ["state2", 'state1'], 0.6) self.Net.setProbability(node3, ["state2", 'state2'], 1.0) expected_outcome = {'node1': 'state2', 'node2': 'state2'} mpe = self.Net.getMPE("node1", "node2") self.assertDictEqual(expected_outcome, mpe) def test_MPE_disconnected(self): """ testing Net.getMPE(NodeName1,NodeName2) between disconnected nodes """ self.Net.createEdge(["node1", "node2"], "node3") node1 = self.Net.getNode("node1") node2 = self.Net.getNode("node2") node3 = self.Net.getNode("node3") self.Net.setProbability(node3, ["state1", 'state1', 'state1'], 0.3) self.Net.setProbability(node3, ["state1", 'state1', 'state2'], 0.1) self.Net.setProbability(node3, ["state1", 'state2', 'state1'], 0.5) self.Net.setProbability(node3, ["state1", 'state2', 'state2'], 0.7) self.Net.setProbability(node3, ["state2", 'state1', 'state1'], 0.7) self.Net.setProbability(node3, ["state2", 'state1', 'state2'], 0.9) self.Net.setProbability(node3, ["state2", 'state2', 'state1'], 0.5) self.Net.setProbability(node3, ["state2", 'state2', 'state2'], 0.3) expected_outcome = {'node1': 'state2', 'node2': 'state1'} mpe = self.Net.getMPE("node1", "node2") self.assertDictEqual(expected_outcome, mpe)