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