func (ds *DendriteSegment) broaden(input data.Bitset, minOverlap int) (overlapCount int) { overlapCount = input.Overlap(ds.Connected()) threshold := ds.Config().Threshold newPermanence := ds.Config().Minimum + ds.Boost if newPermanence > threshold { newPermanence = threshold } newSynapses := input.Clone() newSynapses.AndNot(ds.ReceptiveField()) newSynapses.Foreach(func(k int) { v := ds.Get(k) if v < newPermanence { ds.Set(k, newPermanence) } }) ds.overlapHistory.Record(overlapCount >= minOverlap) if avg, ok := ds.overlapHistory.Average(); ok && avg < ds.MinActivityRatio { for k, v := range ds.permanence { ds.Set(k, v*1.01) } } return }