Example #1
0
func randomStart(ch *markovchain.Chain) markovchain.State {
	var allStates []markovchain.State
	ch.Iterate(func(s *markovchain.StateTransitions) bool {
		allStates = append(allStates, s.State)
		return true
	})
	state := allStates[rand.Intn(len(allStates))]

	// Run through the markov chain to land at a more
	// likely state.
	for i := 0; i < 10; i++ {
		newState := randomTransition(ch, state)
		if newState == nil {
			break
		}
		state = newState
	}

	return state
}