Exemplo n.º 1
0
 def setUp(self):
     # Create BayesNet
     self.bn = BayesianNetwork()
     # 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")])
Exemplo n.º 2
0
 def setUp(self):
     # Create BayesNet
     self.bn = BayesianNetwork()
     # 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([0.6, 0.4])
     weather0.set_probability_table(cpt_weather0, [weather0])
     cpt_weather = numpy.array([[0.7, 0.5], [0.3, 0.5]])
     weather.set_probability_table(cpt_weather, [weather0, weather])
     ice_cream_eaten.set_probability(0.9, [(ice_cream_eaten, True), (weather, "Sun")])
     ice_cream_eaten.set_probability(0.1, [(ice_cream_eaten, False), (weather, "Sun")])
     ice_cream_eaten.set_probability(0.2, [(ice_cream_eaten, True), (weather, "Rain")])
     ice_cream_eaten.set_probability(0.8, [(ice_cream_eaten, False), (weather, "Rain")])
Exemplo n.º 3
0
class ImportExportTest(unittest.TestCase):
    def setUp(self):
        # Create BayesNet
        self.bn = BayesianNetwork()
        # 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([0.6, 0.4])
        weather0.set_probability_table(cpt_weather0, [weather0])
        cpt_weather = numpy.array([[0.7, 0.5], [0.3, 0.5]])
        weather.set_probability_table(cpt_weather, [weather0, weather])
        ice_cream_eaten.set_probability(0.9, [(ice_cream_eaten, True), (weather, "Sun")])
        ice_cream_eaten.set_probability(0.1, [(ice_cream_eaten, False), (weather, "Sun")])
        ice_cream_eaten.set_probability(0.2, [(ice_cream_eaten, True), (weather, "Rain")])
        ice_cream_eaten.set_probability(0.8, [(ice_cream_eaten, False), (weather, "Rain")])

    def test_import_export(self):
        # write BN
        xmlbif = XMLBIF(self.bn, "Test Net")
        xmlbif.write("test_out.xmlbif")
        # read BN
        bn2 = XMLBIF.read("test_out.xmlbif")
        for node1 in self.bn.get_nodes():
            name_found = False
            cpd_equal = False
            value_range_equal = False
            str_equal = False
            pos_equal = False
            for node2 in bn2.get_nodes():
                print(node2.name)
                print(node2.get_cpd())
                # Test node names
                print(node2.name)
                if node1.name == node2.name:
                    name_found = True
                    cpd_equal = node1.get_cpd() == node2.get_cpd()
                    value_range_equal = node1.get_value_range() == node2.get_value_range()
                    str_equal = str(node1) == str(node2)
                    pos_equal = node1.pos == node2.pos
            self.assertTrue(name_found)
            self.assertTrue(cpd_equal)
            self.assertTrue(value_range_equal)
            self.assertTrue(str_equal)
            self.assertTrue(pos_equal)
        # remove file
        os.remove("test_out.xmlbif")
Exemplo n.º 4
0

#About this example:
#This example shows how approximate inference can be used query a purely continuous
#bayesian network. At first that network is being constructed and afterwards it
#is passed to an MCMC object that is used to answer several kinds of questions:
#-Prior marginal
#-Posterior marginal
#-Probability of evidence
#-Maximum a-posteriori hypothesis


#Construct some simple BayesianNetwork. 

#topology
bn = BayesianNetwork()
cnf=ContinuousNodeFactory()
age = cnf.createExponentialNode("Plant_age")
height = cnf.createGaussNode("Plant_height")
diameter = cnf.createBetaNode("Plant_diameter")
bn.add_node(age)
bn.add_node(height)
bn.add_node(diameter)
bn.add_edge(age,height)
bn.add_edge(age,diameter)



#parameterization
#Semantics: Many young plants and the higher the age the lower the probabilty
#->lambda=2.0
Exemplo n.º 5
0
from primo.densities import BetaParameters
from primo.densities import GaussParameters
from primo.densities import NDGauss
from primo.inference.mcmc import MCMC

from primo.evidence import EvidenceEqual as EvEqual
from primo.evidence import EvidenceInterval as EvInterval

import numpy

# Construct some simple BayesianNetwork. In this example it models
# the linear relationship between the age of a plant and the height that
# it has grown up to (+noise)


bn = BayesianNetwork()
cnf = ContinuousNodeFactory()

# create the nodes
age = cnf.createExponentialNode("Age")
sun = cnf.createBetaNode("Sun")
ground = cnf.createGaussNode("Ground")
growth = cnf.createGaussNode("Growth")
height = cnf.createBetaNode("Height")
diameter = cnf.createExponentialNode("Diameter")
children = cnf.createExponentialNode("Children")

# add the nodes to the network
bn.add_node(age)
bn.add_node(sun)
bn.add_node(ground)
Exemplo n.º 6
0
from primo.densities import ExponentialParameters
from primo.densities import BetaParameters
from primo.densities import GaussParameters
from primo.densities import NDGauss
from primo.inference.mcmc import MCMC

from primo.evidence import EvidenceEqual as EvEqual
from primo.evidence import EvidenceInterval as EvInterval

import numpy

#Construct some simple BayesianNetwork. In this example it models
#the linear relationship between the age of a plant and the height that
#it has grown up to (+noise)

bn = BayesianNetwork()
cnf = ContinuousNodeFactory()

#create the nodes
age = cnf.createExponentialNode("Age")
sun = cnf.createBetaNode("Sun")
ground = cnf.createGaussNode("Ground")
growth = cnf.createGaussNode("Growth")
height = cnf.createBetaNode("Height")
diameter = cnf.createExponentialNode("Diameter")
children = cnf.createExponentialNode("Children")

#add the nodes to the network
bn.add_node(age)
bn.add_node(sun)
bn.add_node(ground)
Exemplo n.º 7
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from  primo.networks import BayesianNetwork
from  primo.nodes import DiscreteNode
import numpy

bn = BayesianNetwork()
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)


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

alarm.set_probability(0.1,[(alarm,"Ringing"),(burglary,"Safe"),(earthquake,"Calm")])
Exemplo n.º 8
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
This example shows how to create a BayesNet

@author: djohn
"""

import numpy

from  primo.networks import BayesianNetwork
from  primo.nodes import DiscreteNode


#initialize a new BayesNet
bn = BayesianNetwork()

#create Nodes with Name and the possible values
burglary = DiscreteNode("Burglary", ["Intruder","Safe"])
alarm = DiscreteNode("Alarm", ["Ringing", "Silent"])
earthquake = DiscreteNode("Earthquake", ["Shaking", "Calm"])
john_calls = DiscreteNode("John calls", ["Calling", "Not Calling"])
baum_calls = DiscreteNode("Baum calls", ["Calling", "Not Calling"])

# 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)
Exemplo n.º 9
0
from primo.evidence import EvidenceEqual as EvEq
from primo.inference.mcmc import GibbsTransitionModel
import numpy
import pdb

#About this example:
#This example shows how approximate inference can be used query a purely discrete
#bayesian network. At first that network is being constructed and afterwards it
#is passed to an MCMC object that is used to answer several kinds of questions:
#-Prior marginal
#-Posterior marginal
#-Probability of evidence
#-Maximum a-posteriori hypothesis

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

bn.add_node(burglary)
bn.add_node(alarm)

bn.add_edge(burglary, alarm)

#Parametrize the network
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])
Exemplo n.º 10
0
"""
This example show how to calculate Marginals and 
the probability of evidence.

@author: djohn
"""

from primo.networks import BayesianNetwork
from primo.nodes import DiscreteNode
from primo.inference.factor import EasiestFactorElimination
from primo.inference.factor import FactorTreeFactory
import numpy

#==============================================================================
#Builds the example BayesNet
bn = BayesianNetwork()
burglary = DiscreteNode("Burglary", ["Intruder","Safe"])
alarm = DiscreteNode("Alarm", ["Ringing", "Silent"])
earthquake = DiscreteNode("Earthquake", ["Shaking", "Calm"])
john_calls = DiscreteNode("John calls", ["Calling", "Not Calling"])
baum_calls = DiscreteNode("Baum calls", ["Calling", "Not Calling"])

bn.add_node(burglary)
bn.add_node(alarm)
bn.add_node(earthquake)
bn.add_node(john_calls)
bn.add_node(baum_calls)

bn.add_edge(burglary,alarm)
bn.add_edge(earthquake, alarm)
bn.add_edge(alarm, john_calls)
Exemplo n.º 11
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random

import numpy

from primo.networks import BayesianNetwork
from primo.networks import DynamicBayesianNetwork
from primo.networks import TwoTBN
from primo.nodes import DiscreteNode
import primo.inference.particlefilter as pf
from primo.io import XMLBIF

# Construct a DynmaicBayesianNetwork
dbn = DynamicBayesianNetwork()
B0 = BayesianNetwork()
twoTBN = TwoTBN(XMLBIF.read("Robot_Localization.xmlbif"))

# Configure TwoTBN
x0 = twoTBN.get_node("x0")
x = twoTBN.get_node("x")
door = twoTBN.get_node("door")
twoTBN.set_initial_node(x0.name, x.name)

# Configure initial distribution
x0_init = DiscreteNode(
    x0.name, ["p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9"])
B0.add_node(x0_init)
cpt_x0_init = numpy.array([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
x0_init.set_probability_table(cpt_x0_init, [x0_init])
Exemplo n.º 12
0
 def setUp(self):
     self.bn = BayesianNetwork()
Exemplo n.º 13
0
class NodeAddAndRemoveTestCase(unittest.TestCase):
    def setUp(self):
        self.bn = BayesianNetwork()

    def tearDown(self):
        self.bn = None

    def test_clear_and_len(self):
        self.assertFalse(0 == len(self.bn))
        self.assertFalse(0 == self.bn.number_of_nodes())
        self.bn.clear()
        self.assertEqual(0, len(self.bn))
        self.assertEqual(0, self.bn.number_of_nodes())

    def test_add_node(self):
        self.bn.clear()
        n = DiscreteNode("Some Node", [True, False])
        self.bn.add_node(n)
        self.assertEqual(n, self.bn.get_node("Some Node"))
        self.assertTrue(n in self.bn.get_nodes(["Some Node"]))
        node_with_same_name = DiscreteNode("Some Node", [True, False])
        self.assertRaises(Exception, self.bn.add_node, node_with_same_name)

    def test_remove_node(self):
        self.bn.clear()
        n = DiscreteNode("Some Node to remove", [True, False])
        self.bn.add_node(n)
        self.bn.remove_node(n)
        self.assertFalse(n in self.bn.get_nodes([]))

    def test_add_edge(self):
        self.bn.clear()
        n1 = DiscreteNode("1", [True, False])
        n2 = DiscreteNode("2", [True, False])
        self.bn.add_node(n1)
        self.bn.add_node(n2)
        self.bn.add_edge(n1, n2)
        self.assertTrue(n1 in self.bn.get_parents(n2))
        self.assertTrue(n2 in self.bn.get_children(n1))

    def test_remove_edge(self):
        self.bn.clear()
        n1 = DiscreteNode("1", [True, False])
        n2 = DiscreteNode("2", [True, False])
        self.bn.add_node(n1)
        self.bn.add_node(n2)
        self.bn.add_edge(n1, n2)
        self.assertEqual([n1], self.bn.get_parents(n2))
        self.bn.remove_edge(n1, n2)
        self.assertEqual([], self.bn.get_parents(n2))

    def test_is_valid(self):
        self.bn.clear()
        n1 = DiscreteNode("1", [True, False])
        n2 = DiscreteNode("2", [True, False])
        self.bn.add_node(n1)
        self.bn.add_node(n2)
        self.bn.add_edge(n1, n2)
        self.assertTrue(self.bn.is_valid())
        self.bn.add_edge(n1, n1)
        self.assertFalse(self.bn.is_valid())
        self.bn.remove_edge(n1, n1)
        self.assertTrue(self.bn.is_valid())
        n3 = DiscreteNode("3", [True, False])
        n4 = DiscreteNode("4", [True, False])
        self.bn.add_node(n3)
        self.bn.add_node(n4)
        self.assertTrue(self.bn.is_valid())
        self.bn.add_edge(n2, n3)
        self.assertTrue(self.bn.is_valid())
        self.bn.add_edge(n3, n4)
        self.assertTrue(self.bn.is_valid())
        self.bn.add_edge(n4, n1)
        self.assertFalse(self.bn.is_valid())
Exemplo n.º 14
0
class ImportExportTest(unittest.TestCase):
    def setUp(self):
        # Create BayesNet
        self.bn = BayesianNetwork()
        # 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")])

    def test_import_export(self):
        # write BN
        xmlbif = XMLBIF(self.bn, "Test Net")
        xmlbif.write("test_out.xmlbif")
        # read BN
        bn2 = XMLBIF.read("test_out.xmlbif")
        for node1 in self.bn.get_nodes():
            name_found = False
            cpd_equal = False
            value_range_equal = False
            str_equal = False
            pos_equal = False
            for node2 in bn2.get_nodes():
                print(node2.name)
                print(node2.get_cpd())
                # Test node names
                print(node2.name)
                if node1.name == node2.name:
                    name_found = True
                    cpd_equal = node1.get_cpd() == node2.get_cpd()
                    value_range_equal = node1.get_value_range(
                    ) == node2.get_value_range()
                    str_equal = str(node1) == str(node2)
                    pos_equal = node1.pos == node2.pos
            self.assertTrue(name_found)
            self.assertTrue(cpd_equal)
            self.assertTrue(value_range_equal)
            self.assertTrue(str_equal)
            self.assertTrue(pos_equal)
        # remove file
        os.remove("test_out.xmlbif")
Exemplo n.º 15
0
from primo.evidence import EvidenceEqual as EvEq
from primo.inference.mcmc import GibbsTransitionModel
import numpy
import pdb

#About this example:
#This example shows how approximate inference can be used query a purely discrete
#bayesian network. At first that network is being constructed and afterwards it
#is passed to an MCMC object that is used to answer several kinds of questions:
#-Prior marginal
#-Posterior marginal
#-Probability of evidence
#-Maximum a-posteriori hypothesis

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

bn.add_node(burglary)
bn.add_node(alarm)

bn.add_edge(burglary,alarm)


#Parametrize the network
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])