Exemplo n.º 1
0
    def __init__(self, debugSensor=False, debugMotor=False, **kwargs):
        """
    @param debugSensor (bool) Controls whether sensor encodings are contiguous
    @param debugMotor  (bool) Controls whether motor encodings are contiguous
    """
        super(OneDUniverse, self).__init__(**kwargs)

        self.debugSensor = debugSensor
        self.debugMotor = debugMotor

        self.sensorPatternMachine = ConsecutivePatternMachine(
            self.nSensor, self.wSensor)
        self.sensorEncoder = SDRCategoryEncoder(self.nSensor,
                                                self.wSensor,
                                                forced=True)

        self.motorPatternMachine = ConsecutivePatternMachine(
            self.nMotor, self.wMotor)
        self.motorEncoder = SDRCategoryEncoder(self.nMotor,
                                               self.wMotor,
                                               forced=True)

        # This pool is a human friendly representation of sensory values
        self.elementCodes = (
            range(0x0041, 0x005A + 1) +  # A-Z
            range(0x0061, 0x007A + 1) +  # a-z
            range(0x0030, 0x0039 + 1) +  # 0-9
            range(0x00C0, 0x036F + 1)  # Many others
        )
        self.numDecodedElements = len(self.elementCodes)
Exemplo n.º 2
0
    def setUp(self):
        self.patternMachine = ConsecutivePatternMachine(100, 5)
        self.sequenceMachine = SequenceMachine(self.patternMachine)

        self.tm = MonitoredTemporalMemory(columnDimensions=[100],
                                          cellsPerColumn=4,
                                          initialPermanence=0.6,
                                          connectedPermanence=0.5,
                                          minThreshold=1,
                                          maxNewSynapseCount=6,
                                          permanenceIncrement=0.1,
                                          permanenceDecrement=0.05,
                                          activationThreshold=1)
 def getPatternMachine(self):
   return ConsecutivePatternMachine(6, 1)
Exemplo n.º 4
0
class TutorialTemporalMemoryTest(AbstractTemporalMemoryTest):

    VERBOSITY = 1
    DEFAULT_TM_PARAMS = {
        "columnDimensions": [6],
        "cellsPerColumn": 4,
        "initialPermanence": 0.3,
        "connectedPermanence": 0.5,
        "minThreshold": 1,
        "maxNewSynapseCount": 6,
        "permanenceIncrement": 0.1,
        "permanenceDecrement": 0.05,
        "activationThreshold": 1
    }
    PATTERN_MACHINE = ConsecutivePatternMachine(6, 1)

    def testFirstOrder(self):
        """Basic first order sequences"""
        self.init()

        sequence = self.sequenceMachine.generateFromNumbers([0, 1, 2, 3, None])

        self.feedTM(sequence)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 0)

        self.feedTM(sequence, num=2)

        self.feedTM(sequence)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)

        self.feedTM(sequence, num=4)

        self.feedTM(sequence)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)

    def testHighOrder(self):
        """High order sequences (in order)"""
        self.init()

        sequenceA = self.sequenceMachine.generateFromNumbers(
            [0, 1, 2, 3, None])
        sequenceB = self.sequenceMachine.generateFromNumbers(
            [4, 1, 2, 5, None])

        self.feedTM(sequenceA, num=5)

        self.feedTM(sequenceA, learn=False)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)

        self.feedTM(sequenceB)

        self.feedTM(sequenceB, num=2)

        self.feedTM(sequenceB, learn=False)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[1]), 1)

        self.feedTM(sequenceB, num=3)

        self.feedTM(sequenceB, learn=False)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[2]), 1)

        self.feedTM(sequenceB, num=3)

        self.feedTM(sequenceB, learn=False)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)

        self.feedTM(sequenceA, learn=False)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedInactiveColumns().data[3]), 1)

        self.feedTM(sequenceA, num=10)
        self.feedTM(sequenceA, learn=False)
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)
        # TODO: Requires some form of synaptic decay to forget the ABC=>Y
        # transition that's initially formed
        # self.assertEqual(len(self.tm.mmGetTracePredictedInactiveColumns().data[3]), 0)

    def testHighOrderAlternating(self):
        """High order sequences (alternating)"""
        self.init()

        sequence = self.sequenceMachine.generateFromNumbers([0, 1, 2, 3, None])
        sequence += self.sequenceMachine.generateFromNumbers(
            [4, 1, 2, 5, None])

        self.feedTM(sequence)

        self.feedTM(sequence, num=10)

        self.feedTM(sequence, learn=False)

        # TODO: Requires some form of synaptic decay to forget the
        # ABC=>Y and XBC=>D transitions that are initially formed
        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[3]), 1)
        # self.assertEqual(len(self.tm.mmGetTracePredictedInactiveColumns().data[3]), 0)

        self.assertEqual(
            len(self.tm.mmGetTracePredictedActiveColumns().data[7]), 1)
        # self.assertEqual(len(self.tm.mmGetTracePredictedInactiveColumns().data[7]), 0)

    def testEndlesslyRepeating(self):
        """Endlessly repeating sequence of 2 elements"""
        self.init({"columnDimensions": [2]})

        sequence = self.sequenceMachine.generateFromNumbers([0, 1])

        for _ in xrange(7):
            self.feedTM(sequence)

        self.feedTM(sequence, num=50)

    def testEndlesslyRepeatingWithNoNewSynapses(self):
        """Endlessly repeating sequence of 2 elements with maxNewSynapseCount=1"""
        self.init({
            "columnDimensions": [2],
            "maxNewSynapseCount": 1,
            "cellsPerColumn": 10
        })

        sequence = self.sequenceMachine.generateFromNumbers([0, 1])

        for _ in xrange(7):
            self.feedTM(sequence)

        self.feedTM(sequence, num=100)

    def testLongRepeatingWithNovelEnding(self):
        """Long repeating sequence with novel pattern at the end"""
        self.init({"columnDimensions": [3]})

        sequence = self.sequenceMachine.generateFromNumbers([0, 1])
        sequence *= 10
        sequence += [self.patternMachine.get(2), None]

        for _ in xrange(4):
            self.feedTM(sequence)

        self.feedTM(sequence, num=10)

    def testSingleEndlesslyRepeating(self):
        """A single endlessly repeating pattern"""
        self.init({"columnDimensions": [1]})

        sequence = [self.patternMachine.get(0)]

        for _ in xrange(4):
            self.feedTM(sequence)

        for _ in xrange(2):
            self.feedTM(sequence, num=10)

    # ==============================
    # Overrides
    # ==============================

    def setUp(self):
        super(TutorialTemporalMemoryTest, self).setUp()

        print(
            "\n"
            "======================================================\n"
            "Test: {0} \n"
            "{1}\n"
            "======================================================\n").format(
                self.id(), self.shortDescription())

    def init(self, *args, **kwargs):
        super(TutorialTemporalMemoryTest, self).init(*args, **kwargs)

        print "Initialized new TM with parameters:"
        print pprint.pformat(self._computeTMParams(kwargs.get("overrides")))
        print

    def feedTM(self, sequence, learn=True, num=1):
        self._showInput(sequence, learn=learn, num=num)

        super(TutorialTemporalMemoryTest, self).feedTM(sequence,
                                                       learn=learn,
                                                       num=num)

        print self.tm.mmPrettyPrintTraces(
            self.tm.mmGetDefaultTraces(verbosity=2),
            breakOnResets=self.tm.mmGetTraceResets())
        print

        if learn:
            print self.tm.mmPrettyPrintConnections()

    # ==============================
    # Helper functions
    # ==============================

    def _showInput(self, sequence, learn=True, num=1):
        sequenceText = self.sequenceMachine.prettyPrintSequence(
            sequence, verbosity=self.VERBOSITY)
        learnText = "(learning {0})".format("enabled" if learn else "disabled")
        numText = " [{0} times]".format(num) if num > 1 else ""
        print "Feeding sequence {0}{1}:\n{2}".format(learnText, numText,
                                                     sequenceText)
        print
Exemplo n.º 5
0
 def setUp(self):
     self.patternMachine = ConsecutivePatternMachine(100, 5)
Exemplo n.º 6
0
 def setUp(self):
     self.patternMachine = ConsecutivePatternMachine(100, 5)
     self.sequenceMachine = SequenceMachine(self.patternMachine)