5. Pattern Matching

Pattern Matching

Pattern matching, along with learning the periodicity of the input,
does the basic computations the code is based upon. It is able to
learn patterns of different length from the input, and match partially
completed patterns to either predict future inputs, or turn the focus
of attention to different patterns interesting to a specific behavior.

The pattern matcher receives commands from the attention loop,
which directs it on what to match, what to record (learn), and
what to pay attention to.

Calculating Certainties

Every time a pattern is matched, individual elements get averaged,
and their certainties updated. The certainty of a match between two
values is one minus the difference between the two values over the
difference between the maximum value and the minimum value at the
current window. The certainty of a a match between two pattern
elements is the average of the certainties of their values. The
certainty of a match between two patterns, is the average of the
certainties of their elements, weighted by the saliency of each
element. Intuitively, one will try to match within a sequence of
notes the important notes, and will care less about less salient
notes which do not match.

Pattern Tables

The figure shows an individual pattern of two elements. A pattern
table will hold many such patterns. A different pattern table is
created for every pattern length that we are matching. Moreover, for
the same length (the same number of notes that we match upon), there
will be different pattern tables for different voice combinations. For
patterns of 3 notes for example, we can have a pattern table storing
all patterns found on voices [a b c] another one storing all patterns
found on [a b d], and so on.

Updating Values

When the certainty with which two patterns are matched is too
low, then a new pattern is added to the pattern table.

When the certainty is high enough, then the matched pattern is
extended to include the current pattern with which it matched.