class

Markov::Chain(LinkType)

Inherits Reference / Object

A Chain is a vehicle for generating probable sequences of type LinkType

Constructors

new(transition_table : TransitionTable(LinkType), seed : LinkType | Nil = nil)

For larger processes, you'll want to externally train a TransitionTable then pass it in as an argument. If seed is not provided, it will default to a random item chosen with TransitionTable#random_key

Source
new(sample : Array(LinkType), seed : LinkType = (sample.sample(1)).first)

If you have a small (Array-sized) data set, you can pass it as sample and a TransitionTable will be constructed for you with the sample data.

seed should be the element in sample which you would like to begin the sequence. If no seed is provided, a random element will be selected from sample.

Source
new(pull : JSON::PullParser)

Makes it possible to use #to_json and #from_json (see Crystal docs)

Source

Instance methods

generate(count : Int32)

Generates a probable, sequential Array of LinkType elements of count length

Source
generated

Returns an ordered Array(LinkType) of all LinkType elements generated

Source
next

Generates the next probable LinkType element

Source
on_dead_end

Sets an exception handler for EmptyTransitionMatrixException when Chain instance reaches a dead end while using Chain#generate or Chain#next. Returned value is inserted as the next probable element.

Usage:

c = Markov::Chain(String).new sample: ["Koala", "Kangaroo"] of String, seed: "Kangaroo"
c.on_dead_end do |transition_table, chain, exception|
  "Koala"
end
c.next() #=> "Koala"
c.next() #=> "Kangaroo"
c.next() #=> "Koala"
Source
seed

Returns seed element.

Source
transition_table

Returns the trained instance of TransitionTable

Source