#!/usr/bin/env python # -*- coding: utf-8 -*- from primo.core import DynamicBayesNet from primo.reasoning import DiscreteNode bn = DynamicBayesNet() burglary = DiscreteNode("Burglary", ["Intruder", "Safe"]) alarm = DiscreteNode("Alarm", ["Ringing", "Silent", "Kaputt"]) earthquake = DiscreteNode("Earthquake", ["Shaking", "Calm"]) john_calls = DiscreteNode("John calls", ["Calling", "Not Calling"]) mary_calls = DiscreteNode("Mary calls", ["Calling", "Not Calling"]) bn.add_node(burglary) bn.add_node(alarm) bn.add_node(earthquake) bn.add_node(john_calls) bn.add_node(mary_calls) bn.add_edge(burglary, alarm) bn.add_edge(earthquake, alarm) bn.add_edge(alarm, john_calls) bn.add_edge(alarm, mary_calls) bn.add_edge(alarm, alarm, True) print(bn.is_valid())
def setUp(self): self.dbn = DynamicBayesNet()
#!/usr/bin/env python # -*- coding: utf-8 -*- from primo.core import BayesNet from primo.core import DynamicBayesNet from primo.core import TwoTBN from primo.reasoning import DiscreteNode import primo.reasoning.particlebased.ParticleFilterDBN as pf import numpy #Construct some simple DynmaicBayesianNetwork B0 = BayesNet() dbn = DynamicBayesNet() twoTBN = TwoTBN() weather0_init = DiscreteNode("Weather0", ["Sun", "Rain"]) weather0 = DiscreteNode("Weather0", ["Sun", "Rain"]) weather = DiscreteNode("Weather", ["Sun", "Rain"]) ice_cream_eaten = DiscreteNode("Ice Cream Eaten", [True, False]) B0.add_node(weather0_init) twoTBN.add_node(weather0, True) twoTBN.add_node(weather) twoTBN.add_node(ice_cream_eaten) twoTBN.add_edge(weather, ice_cream_eaten) twoTBN.add_edge(weather0, weather); cpt_weather0_init = numpy.array([.6, .4]) weather0_init.set_probability_table(cpt_weather0_init, [weather0_init])
class DynamicBayesNetTest(unittest.TestCase): def setUp(self): self.dbn = DynamicBayesNet() def tearDown(self): self.dbn = None def test_add_node(self): self.dbn.clear() n = DiscreteNode("Some Node", [True, False]) self.dbn.add_node(n) self.assertEqual(n, self.dbn.get_node("Some Node")) self.assertTrue(n in self.dbn.get_nodes(["Some Node"])) def test_temporal_edges(self): self.dbn.clear() n1 = DiscreteNode("1", [True, False]) n2 = DiscreteNode("2", [False, False]) self.dbn.add_node(n1) self.dbn.add_node(n2) self.assertTrue(self.dbn.is_valid()) self.dbn.add_edge(n1, n1) self.assertFalse(self.dbn.is_valid()) self.dbn.add_edge(n1, n1, True) self.assertTrue(self.dbn.is_valid())