Source code for cbp.builder.hmm_sim_builder

from cbp.node import FactorNode

from .hmm_builder import HMMBuilder


[docs]class HMMSimBuilder(HMMBuilder): def __init__(self, length, simulator, policy, random_seed=1): super().__init__(length, simulator.record.state_num, policy, random_seed) self.simulator = simulator self.cnt_constrained_node = 0
[docs] def fix_initpotential(self, potential=None): first_node = self.graph.get_node(f"VarNode_{0:03d}") if potential is None: potential = self.simulator.get_hidden_margin(0) first_node.potential = potential
[docs] def add_constrained_node(self, probability=None): prob = self.simulator.get_fix_margin( self.cnt_constrained_node) self.cnt_constrained_node += 1 return super().add_constrained_node(prob)
[docs] def add_factor(self, name_list, is_conv=False): """add factor to hmm graph :param name_list: connected node :type name_list: list :param is_conv: is emit or not , defaults to False-- transition :type is_conv: bool, optional :return: FactorNode :rtype: cbp.FactorNode """ if is_conv: # emit potential = self.simulator.get_emission_potential() else: potential = self.simulator.get_transition_potential() factornode = FactorNode(name_list, potential) self.graph.add_factornode(factornode) return factornode
[docs] def add_branch(self, head_node=None, is_constrained=False, prob=None, is_conv=False): if is_conv: # emit return super().add_branch(head_node, True, prob, is_conv) return super().add_branch(head_node, False, prob, is_conv)
[docs] def example(self, num_sample): self.simulator.reset() self.simulator.example(num_sample)