Esempio n. 1
0
    def next(self, available_states):
        distr= {}
        state_counters= self.states_counters[self.actual_state]
        n= sum(state_counters.itervalues())
        alpha= self.alpha

        # solo esta parte cambia, donde uso available_states
        nexts= self.hmm.nexts(self.actual_state)
        nexts= dict(((k, v) for (k,v) in nexts.iteritems() if k in available_states))
        s= sum(nexts.itervalues())
        for k, v in nexts.iteritems():
            nexts[k]= v/s

        for state, prob in nexts.iteritems():
            distr[state]= alpha/(alpha+n)*prob + n/(alpha+n)*state_counters[state]

        rnd_picker= RandomPicker("",distr)
        self.actual_state= rnd_picker.get_value()
        state_counters[self.actual_state]+=1

        res= {}
        for random_variable in self.hmm.observators(self.actual_state):
            res[random_variable]= random_variable.get_value()

        return res