Skip to content
Snippets Groups Projects
TwoTBN.py 1.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • # -*- coding: utf-8 -*-
    
    from primo.core import BayesNet
    
    from primo.reasoning.density import ProbabilityTable
    
    
    
    class TwoTBN(BayesNet):
        ''' This is the implementation of a 2-time-slice Bayesian network (2-TBN).
        '''
    
        __initial_nodes = []
    
        def __init__(self, bayesnet=None):
    
            BayesNet.__init__(self)
    
            if bayesnet:
                if not isinstance(bayesnet, BayesNet):
                    raise Exception("Parameter 'bayesnet' is not a instance of class BayesNet.")
                self.graph = bayesnet.graph
                self.node_lookup = bayesnet.node_lookup
    
        def create_timeslice(self, state):
            for node_x in self.__initial_nodes:
                for node_y in state:
                    if node_x.name == node_y.name:
                        cpd = ProbabilityTable()
                        cpd.add_variable(node_x)
                        node_x.set_cpd(cpd)
                        node_x.set_probability(1., [(node_x, state[node_y])])
            return self
    
        def add_node(self, node, initial=False):
            super(TwoTBN, self).add_node(node)
            if initial:
    
                self.add_initial_node(node)
                
        def set_initial_node(self, node_name):
            node = self.get_node(node_name)        
            self.__initial_nodes.append(node)
    
    
        def has_initial_node_by_name(self, node_name):
    
            Check if this instance has an inital node with name node_name.
            '''
            for node in self.__initial_nodes:
                if node.name == node_name:
    
            return False