Newer
Older
# -*- 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).
'''
def __init__(self, bayesnet=None):
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: