Exemplo n.º 1
0
        public void testNoChangeToNonSelectedMatchingSegmentsInBurstingColumn()
        {
            TemporalMemory tm = new TemporalMemory();
            Connections    cn = new Connections();
            Parameters     p  = getDefaultParameters(null, KEY.PERMANENCE_DECREMENT, 0.08);

            p.apply(cn);
            tm.init(cn);

            int[]  previousActiveColumns = { 0 };
            int[]  activeColumns         = { 1 };
            Cell[] previousActiveCells   = { cn.getCell(0), cn.getCell(1), cn.getCell(2), cn.getCell(3) };
            Cell[] burstingCells         = { cn.getCell(4), cn.getCell(5) };

            DistalDendrite selectedMatchingSegment = cn.CreateDistalSegment(burstingCells[0]);

            cn.createSynapse(selectedMatchingSegment, previousActiveCells[0], 0.3);
            cn.createSynapse(selectedMatchingSegment, previousActiveCells[1], 0.3);
            cn.createSynapse(selectedMatchingSegment, previousActiveCells[2], 0.3);
            cn.createSynapse(selectedMatchingSegment, cn.getCell(81), 0.3);

            DistalDendrite otherMatchingSegment = cn.CreateDistalSegment(burstingCells[1]);
            Synapse        as1 = cn.createSynapse(otherMatchingSegment, previousActiveCells[0], 0.3);
            Synapse        as2 = cn.createSynapse(otherMatchingSegment, previousActiveCells[1], 0.3);
            Synapse        is1 = cn.createSynapse(otherMatchingSegment, cn.getCell(81), 0.3);

            tm.Compute(previousActiveColumns, true);
            tm.Compute(activeColumns, true);

            Assert.AreEqual(0.3, as1.getPermanence(), 0.01);
            Assert.AreEqual(0.3, as2.getPermanence(), 0.01);
            Assert.AreEqual(0.3, is1.getPermanence(), 0.01);
        }
Exemplo n.º 2
0
        public void TestReinforcedCorrectlyActiveSegments()
        {
            TemporalMemory tm = new TemporalMemory();
            Connections    cn = new Connections();
            Parameters     p  = getDefaultParameters(null, KEY.INITIAL_PERMANENCE, 0.2);

            p = getDefaultParameters(p, KEY.MAX_NEW_SYNAPSE_COUNT, 4);
            p = getDefaultParameters(p, KEY.PERMANENCE_DECREMENT, 0.08);
            p = getDefaultParameters(p, KEY.PREDICTED_SEGMENT_DECREMENT, 0.02);
            p.apply(cn);
            tm.init(cn);

            int[]  previousActiveColumns = { 0 };
            int[]  activeColumns         = { 1 };
            Cell[] previousActiveCells   = { cn.getCell(0), cn.getCell(1), cn.getCell(2), cn.getCell(3) };
            Cell   activeCell            = cn.getCell(5);

            DistalDendrite activeSegment = cn.CreateDistalSegment(activeCell);
            Synapse        as1           = cn.createSynapse(activeSegment, previousActiveCells[0], 0.5);
            Synapse        as2           = cn.createSynapse(activeSegment, previousActiveCells[1], 0.5);
            Synapse        as3           = cn.createSynapse(activeSegment, previousActiveCells[2], 0.5);
            Synapse        is1           = cn.createSynapse(activeSegment, cn.getCell(81), 0.5);

            tm.Compute(previousActiveColumns, true);
            tm.Compute(activeColumns, true);

            Assert.AreEqual(0.6, as1.getPermanence(), 0.1);
            Assert.AreEqual(0.6, as2.getPermanence(), 0.1);
            Assert.AreEqual(0.6, as3.getPermanence(), 0.1);
            Assert.AreEqual(0.42, is1.getPermanence(), 0.001);
        }
Exemplo n.º 3
0
        public void testAdaptSegmentToMax()
        {
            TemporalMemory tm = new TemporalMemory();
            Connections    cn = new Connections();
            Parameters     p  = Parameters.getAllDefaultParameters();

            p.apply(cn);
            tm.init(cn);

            DistalDendrite dd = cn.CreateDistalSegment(cn.getCell(0));
            Synapse        s1 = cn.createSynapse(dd, cn.getCell(23), 0.9);

            tm.adaptSegment(cn, dd, cn.getCellSet(new int[] { 23 }), cn.getPermanenceIncrement(), cn.getPermanenceDecrement());
            Assert.AreEqual(1.0, s1.getPermanence(), 0.1);

            // Now permanence should be at max
            tm.adaptSegment(cn, dd, cn.getCellSet(new int[] { 23 }), cn.getPermanenceIncrement(), cn.getPermanenceDecrement());
            Assert.AreEqual(1.0, s1.getPermanence(), 0.1);
        }
Exemplo n.º 4
0
        public void testAdaptSegment()
        {
            TemporalMemory tm = new TemporalMemory();
            Connections    cn = new Connections();
            Parameters     p  = Parameters.getAllDefaultParameters();

            p.apply(cn);
            tm.init(cn);

            DistalDendrite dd = cn.CreateDistalSegment(cn.getCell(0));
            Synapse        s1 = cn.createSynapse(dd, cn.getCell(23), 0.6);
            Synapse        s2 = cn.createSynapse(dd, cn.getCell(37), 0.4);
            Synapse        s3 = cn.createSynapse(dd, cn.getCell(477), 0.9);

            tm.adaptSegment(cn, dd, cn.getCellSet(new int[] { 23, 37 }), cn.getPermanenceIncrement(), cn.getPermanenceDecrement());

            Assert.AreEqual(0.7, s1.getPermanence(), 0.01);
            Assert.AreEqual(0.5, s2.getPermanence(), 0.01);
            Assert.AreEqual(0.8, s3.getPermanence(), 0.01);
        }
Exemplo n.º 5
0
        public void testNoChangeToMatchingSegmentsInPredictedActiveColumn()
        {
            TemporalMemory tm = new TemporalMemory();
            Connections    cn = new Connections();
            Parameters     p  = getDefaultParameters();

            p.apply(cn);
            tm.init(cn);

            int[]       previousActiveColumns = { 0 };
            int[]       activeColumns         = { 1 };
            Cell[]      previousActiveCells   = { cn.getCell(0), cn.getCell(1), cn.getCell(2), cn.getCell(3) };
            Cell        expectedActiveCell    = cn.getCell(4);
            List <Cell> expectedActiveCells   = new List <Cell>(new Cell[] { expectedActiveCell });
            Cell        otherBurstingCell     = cn.getCell(5);

            DistalDendrite activeSegment = cn.CreateDistalSegment(expectedActiveCell);

            cn.createSynapse(activeSegment, previousActiveCells[0], 0.5);
            cn.createSynapse(activeSegment, previousActiveCells[1], 0.5);
            cn.createSynapse(activeSegment, previousActiveCells[2], 0.5);
            cn.createSynapse(activeSegment, previousActiveCells[3], 0.5);

            DistalDendrite matchingSegmentOnSameCell = cn.CreateDistalSegment(expectedActiveCell);
            Synapse        s1 = cn.createSynapse(matchingSegmentOnSameCell, previousActiveCells[0], 0.3);
            Synapse        s2 = cn.createSynapse(matchingSegmentOnSameCell, previousActiveCells[1], 0.3);

            DistalDendrite matchingSegmentOnOtherCell = cn.CreateDistalSegment(otherBurstingCell);
            Synapse        s3 = cn.createSynapse(matchingSegmentOnOtherCell, previousActiveCells[0], 0.3);
            Synapse        s4 = cn.createSynapse(matchingSegmentOnOtherCell, previousActiveCells[1], 0.3);

            ComputeCycle cc = tm.Compute(previousActiveColumns, true) as ComputeCycle;

            Assert.IsTrue(cc.predictiveCells.SequenceEqual(expectedActiveCells));
            tm.Compute(activeColumns, true);

            Assert.AreEqual(0.3, s1.getPermanence(), 0.01);
            Assert.AreEqual(0.3, s2.getPermanence(), 0.01);
            Assert.AreEqual(0.3, s3.getPermanence(), 0.01);
            Assert.AreEqual(0.3, s4.getPermanence(), 0.01);
        }
Exemplo n.º 6
0
        public void testPunishMatchingSegmentsInInactiveColumns()
        {
            TemporalMemory tm = new TemporalMemory();
            Connections    cn = new Connections();
            Parameters     p  = getDefaultParameters(null, KEY.MAX_NEW_SYNAPSE_COUNT, 4);

            p = getDefaultParameters(p, KEY.INITIAL_PERMANENCE, 0.2);
            p = getDefaultParameters(p, KEY.PREDICTED_SEGMENT_DECREMENT, 0.02);
            p.apply(cn);
            tm.init(cn);

            int[]  prevActiveColumns    = { 0 };
            Cell[] prevActiveCells      = { cn.getCell(0), cn.getCell(1), cn.getCell(2), cn.getCell(3) };
            int[]  activeColumns        = { 1 };
            Cell   previousInactiveCell = cn.getCell(81);

            DistalDendrite activeSegment = cn.CreateDistalSegment(cn.getCell(42));
            Synapse        as1           = cn.createSynapse(activeSegment, prevActiveCells[0], .5);
            Synapse        as2           = cn.createSynapse(activeSegment, prevActiveCells[1], .5);
            Synapse        as3           = cn.createSynapse(activeSegment, prevActiveCells[2], .5);
            Synapse        is1           = cn.createSynapse(activeSegment, previousInactiveCell, .5);

            DistalDendrite matchingSegment = cn.CreateDistalSegment(cn.getCell(43));
            Synapse        as4             = cn.createSynapse(matchingSegment, prevActiveCells[0], .5);
            Synapse        as5             = cn.createSynapse(matchingSegment, prevActiveCells[1], .5);
            Synapse        is2             = cn.createSynapse(matchingSegment, previousInactiveCell, .5);

            tm.Compute(prevActiveColumns, true);
            tm.Compute(activeColumns, true);

            Assert.AreEqual(0.48, as1.getPermanence(), 0.01);
            Assert.AreEqual(0.48, as2.getPermanence(), 0.01);
            Assert.AreEqual(0.48, as3.getPermanence(), 0.01);
            Assert.AreEqual(0.48, as4.getPermanence(), 0.01);
            Assert.AreEqual(0.48, as5.getPermanence(), 0.01);
            Assert.AreEqual(0.50, is1.getPermanence(), 0.01);
            Assert.AreEqual(0.50, is2.getPermanence(), 0.01);
        }