func (c *Column) LearnSequence(learnState data.Bitset) { logEnabled := log.HtmLogger.Enabled() if learnState.IsZero() { // Select the learning cell, but don't increment the target. c.learning = c.learningTarget if logEnabled { log.HtmLogger.Printf("\t(%d, %d)=%04d: skip learning empty sequence", c.Index, c.learning, c.CellId(c.learning)) } return } cell, sIndex, _ := c.FindBestSegment(learnState, 1, true) if sIndex >= 0 { if logEnabled { log.HtmLogger.Printf("\t(%d, %d)=%04d: Will reinforce segment: %v", c.Index, cell, c.CellId(cell), c.distal[cell].Segment(sIndex)) } } else { if logEnabled { log.HtmLogger.Printf("\t(%d, %d)=%04d: Will learn a new segment.", c.Index, c.learningTarget, c.CellId(c.learningTarget)) } cell = c.learningTarget c.learningTarget = (c.learningTarget + 1) % c.Height() sIndex = -1 } c.learning = cell update := c.distal[cell].CreateUpdate(sIndex, learnState, 1) if logEnabled { log.HtmLogger.Printf("\tLearning sequence %v => (%d, %d)=%04d", update, c.Index, cell, c.CellId(cell)) } c.distal[cell].Apply(update, true) }