Doo.Machine.HTM.HTMCell.AdaptSegments C# (CSharp) Method

AdaptSegments() public method

public AdaptSegments ( bool positiveReinforcement ) : void
positiveReinforcement bool
return void
        public void AdaptSegments(bool positiveReinforcement)
        {
            foreach (SegmentUpdate segInfo in _segmentUpdateList)
            {
                if (segInfo.Segment != null)
                {
                    if (positiveReinforcement)
                    {
                        foreach (HTMSynapse syn in segInfo.Segment.Synapses)
                            if (segInfo.ActiveSynapses.Contains(syn))
                                syn.IncreasePermanence();
                            else
                                syn.DecreasePermanence();
                    }
                    else
                        foreach (HTMSynapse syn in segInfo.ActiveSynapses)
                            syn.DecreasePermanence();
                    // TO DO : the series of negative reinforcements should bring to eliminate the entire segment.
                }

                if (segInfo.AddNewSynapses && segInfo.NewSynapses.Count > 0)
                {
                    // check wheter exist a similar segment
                    bool isFound = false;
                    foreach (HTMSegment seg in _distalSegments)
                    {
                        int foundCount = 0;
                        foreach (HTMSynapse syn in seg.Synapses)
                            if (segInfo.NewSynapses.Contains(syn.InputCell))
                                foundCount++;
                        if (foundCount == segInfo.NewSynapses.Count)
                        {
                            isFound = true;
                            break;
                        }
                    }
                    if (isFound)
                        continue;

                    // update or create a segment
                    HTMSegment segment;
                    if (segInfo.Segment != null)
                        segment = segInfo.Segment;
                    else
                    {
                        segment = new HTMSegment(this, _column.Region.SegmentActivationThreshold);
                        _distalSegments.Add(segment);
                        _column.Region.Director.Log("Created new distal segment on a cell on column " + segment.Cell.Column.PosX.ToString() + "," + segment.Cell.Column.PosY.ToString());
                    }
                    segment.IsSequence = segInfo.IsSequence;
                    foreach (HTMCell cell in segInfo.NewSynapses)
                    {
                        //
                        bool find = false;
                        foreach (HTMSynapse syn in segment.Synapses)
                        {
                            if (syn.InputCell == cell)
                            {
                                find = true;
                                break;
                            }
                        }
                        //
                        if (!find)
                            segment.Synapses.Add(new HTMSynapse(cell));

                    }
                }
            }
            _segmentUpdateList.Clear();
        }