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); }
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); }
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); }
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); }
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); }
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); }