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 }