Example #1
0
func randomTransition(ch *markovchain.Chain, state markovchain.State) markovchain.State {
	entry := ch.Lookup(state)
	if entry == nil || len(entry.Targets) == 0 {
		return nil
	}

	prob := rand.Float64()
	var curProb float64
	for i, x := range entry.Probabilities {
		curProb += x
		if curProb > prob {
			return entry.Targets[i]
		}
	}

	return entry.Targets[len(entry.Targets)-1]
}