def test_complicated_multi(self):
     n1 = DiscreteNode("Some Node", [True, False])
     n2 = DiscreteNode("Second Node" , [True, False,"noIdea"])
     
     cpt1 = numpy.array([2,3])
     cpt2 = numpy.array([5,7,9])
     
     n1.set_probability_table(cpt1,[n1])
     n2.set_probability_table(cpt2,[n2])
     
     c3 = n1.get_cpd().multiplication(n2.get_cpd())
     c3 = n1.get_cpd().multiplication(c3)
     
     cptN = numpy.array([[20, 28, 36],[45, 63, 81]])        
     numpy.testing.assert_array_equal(c3.table,cptN)
 def test_easy_values(self):
     n1 = DiscreteNode("Some Node", [True, False])
     n2 = DiscreteNode("Second Node" , [True, False])
     
     cpt1 = numpy.array([2,3])
     cpt2 = numpy.array([5,7])
     
     n1.set_probability_table(cpt1,[n1])
     n2.set_probability_table(cpt2,[n2])
     
     s = n1.get_cpd().multiplication(n2.get_cpd())
     
     cptN = numpy.array([[10,14],[15,21]])
     
     numpy.testing.assert_array_equal(s.table,cptN)
     self.assertEqual(s.variables[0],n1)
 def test_easy_marginalize(self):
     n1 = DiscreteNode("Some Node", [True, False])
     n2 = DiscreteNode("Second Node" , [True, False, "other"])
     
     cpt1 = numpy.array([2,3])
     cpt2 = numpy.array([5,7,3])
     
     n1.set_probability_table(cpt1,[n1])
     n2.set_probability_table(cpt2,[n2])
     
     s = n1.get_cpd().multiplication(n2.get_cpd())
     s =s.marginalization(n2)
     
     print s.table
     
     cptN = numpy.array([30,45])        
     
     numpy.testing.assert_array_equal(s.table,cptN)
     self.assertEqual(s.variables[0],n1)
Example #4
0
 def setUp(self):
     # Create BayesNet
     self.bn = BayesNet();
     # Create Nodes
     weather0 = DiscreteNode("Weather0", ["Sun", "Rain"])
     weather = DiscreteNode("Weather", ["Sun", "Rain"])
     ice_cream_eaten = DiscreteNode("Ice Cream Eaten", [True, False])
     # Add nodes
     self.bn.add_node(weather0)
     self.bn.add_node(weather)
     self.bn.add_node(ice_cream_eaten)
     # Add edges
     self.bn.add_edge(weather, ice_cream_eaten)
     self.bn.add_edge(weather0, weather);
     # Set probabilities
     cpt_weather0 = numpy.array([.6, .4])
     weather0.set_probability_table(cpt_weather0, [weather0])
     cpt_weather = numpy.array([[.7, .5],
                                [.3, .5]])
     weather.set_probability_table(cpt_weather, [weather0, weather])
     ice_cream_eaten.set_probability(.9, [(ice_cream_eaten, True), (weather, "Sun")])
     ice_cream_eaten.set_probability(.1, [(ice_cream_eaten, False), (weather, "Sun")])
     ice_cream_eaten.set_probability(.2, [(ice_cream_eaten, True), (weather, "Rain")])
     ice_cream_eaten.set_probability(.8, [(ice_cream_eaten, False), (weather, "Rain")])
Example #5
0
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)


burglary.set_probability(0.2, [(burglary, "Intruder")])

alarm.set_probability(0.1, [(alarm, "Ringing"), (burglary, "Safe"), (earthquake, "Calm")])

cpt = numpy.array([[0.1, 0.9], [0.5, 0.5], [0.4, 0.6]])
john_calls.set_probability_table(cpt, [alarm, john_calls])

print john_calls.is_valid()
print alarm.is_valid()

bn.draw()
Example #6
0
import numpy

#Construct some simple BayesianNetwork
bn = BayesNet()
burglary = DiscreteNode("Burglary", ["Intruder","Safe"])
alarm = DiscreteNode("Alarm", ["Ringing", "Silent","Kaputt"])

bn.add_node(burglary)


bn.add_node(alarm)

bn.add_edge(burglary,alarm)

burglary_cpt=numpy.array([0.2,0.8])
burglary.set_probability_table(burglary_cpt, [burglary])

alarm_cpt=numpy.array([[0.8,0.15,0.05],[0.05,0.9,0.05]])
alarm.set_probability_table(alarm_cpt, [burglary,alarm])

#Construct a Markov Chain by sampling states from this Network

transition_model = GibbsTransitionModel()

mcs = MarkovChainSampler()
initial_state={burglary:"Safe",alarm:"Silent"}
chain = mcs.generateMarkovChain(bn, 5000, transition_model, initial_state)

#for c in chain:
#    print c
Example #7
0
# add Nodes to BayesNet
bn.add_node(burglary)
bn.add_node(alarm)
bn.add_node(earthquake)
bn.add_node(john_calls)
bn.add_node(baum_calls)

# Add edges to show dependencies
bn.add_edge(burglary, alarm)
bn.add_edge(earthquake, alarm)
bn.add_edge(alarm, john_calls)
bn.add_edge(alarm, baum_calls)

# create probability tables and set them in the node
cpt_burglary = numpy.array([0.001, 0.999])
burglary.set_probability_table(cpt_burglary, [burglary])

cpt_earthquake = numpy.array([0.002, 0.998])
earthquake.set_probability_table(cpt_earthquake, [earthquake])

# another possibility to set probabilities
alarm.set_probability(0.95, [(alarm, "Ringing"), (burglary, "Intruder"), (earthquake, "Shaking")])
alarm.set_probability(0.05, [(alarm, "Silent"), (burglary, "Intruder"), (earthquake, "Shaking")])
alarm.set_probability(0.29, [(alarm, "Ringing"), (burglary, "Safe"), (earthquake, "Shaking")])
alarm.set_probability(0.71, [(alarm, "Silent"), (burglary, "Safe"), (earthquake, "Shaking")])
alarm.set_probability(0.94, [(alarm, "Ringing"), (burglary, "Intruder"), (earthquake, "Calm")])
alarm.set_probability(0.06, [(alarm, "Silent"), (burglary, "Intruder"), (earthquake, "Calm")])
alarm.set_probability(0.001, [(alarm, "Ringing"), (burglary, "Safe"), (earthquake, "Calm")])
alarm.set_probability(0.999, [(alarm, "Silent"), (burglary, "Safe"), (earthquake, "Calm")])

baum_calls.set_probability(0.9, [(alarm, "Ringing"), (baum_calls, "Calling")])
Example #8
0
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])

cpt_weather0 = numpy.array([.6, .4])
weather0.set_probability_table(cpt_weather0, [weather0])

cpt_weather = numpy.array([[.7, .5],
                           [.3, .5]])
weather.set_probability_table(cpt_weather, [weather, weather0])
cpt_ice_cream_eaten = numpy.array([[.9, .2],
                                   [.1, .8]])
ice_cream_eaten.set_probability_table(cpt_ice_cream_eaten, [ice_cream_eaten, weather])

from primo.utils import XMLBIF
xmlbif = XMLBIF(twoTBN, "Test")
xmlbif.write("test.xmlbif")