Beispiel #1
0
class Column:
    """
    A class only to group properties related to columns.
    """
    def __init__(self):
        """
        Initializes a new instance of this class.
        """

        # Position on X axis
        self.x = -1

        # Position on Y axis
        self.y = -1

        # Proximal segment of this column
        self.segment = Segment(SegmentType.PROXIMAL)

        # List of cells that compose this column.
        self.cells = []

        # 3D object reference
        self.tree3d_pos = (0, 0, 0)

    def getCell(self, z):
        """
        Return the cell located at given position
        """
        for cell in self.cells:
            if cell.z == z:
                return cell

    def nextStep(self):
        """
        Perfoms actions related to time step progression.
        """
        self.segment.nextStep()
        for cell in self.cells:
            cell.nextStep()

    def calculateStatistics(self):
        """
        Calculate statistics after an iteration.
        """
        self.segment.calculateStatistics()
        for cell in self.cells:
            cell.calculateStatistics()
Beispiel #2
0
    def __init__(self):
        """
        Initializes a new instance of this class.
        """

        # Position on X axis
        self.x = -1

        # Position on Y axis
        self.y = -1

        # Proximal segment of this column
        self.segment = Segment(SegmentType.PROXIMAL)

        # List of cells that compose this column.
        self.cells = []

        # 3D object reference
        self.tree3d_pos = (0, 0, 0)
Beispiel #3
0
    def __init__(self):
        """
    Initializes a new instance of this class.
    """

        #region Instance fields

        self.x = -1
        """Position on X axis"""

        self.y = -1
        """Position on Y axis"""

        self.segment = Segment(SegmentType.proximal)
        """Proximal segment of this column"""

        self.cells = []
        """List of cells that compose this column."""

        #region 3d-tree properties (simulation form)

        self.tree3d_x = 0
        self.tree3d_y = 0
        self.tree3d_z = 0
Beispiel #4
0
    def __init__(self):
        """
    Initializes a new instance of this class.
    """

        # region Instance fields

        self.x = -1
        """Position on X axis"""

        self.y = -1
        """Position on Y axis"""

        self.segment = Segment(SegmentType.proximal)
        """Proximal segment of this column"""

        self.cells = []
        """List of cells that compose this column."""

        # region 3d-tree properties (simulation form)

        self.tree3d_x = 0
        self.tree3d_y = 0
        self.tree3d_z = 0
Beispiel #5
0
  def updateTemporalElements(self):
    """
    Update elements regarding temporal pooler
    """

    # Update cells, distal segments and synapses according to active columns
    for colIdx in range(len(self.columns)):
      column = self.columns[colIdx]

      # Mark proximal segment and its connected synapses as predicted
      if column.segment.isPredicted.atCurrStep():
        for synapse in column.segment.synapses:
          if synapse.isConnected.atCurrStep():
            synapse.isPredicted.setForCurrStep(True)
            synapse.inputElem.isPredicted.setForCurrStep(True)

      # Mark proximal segment and its connected synapses that were predicted but are not active now
      if column.segment.isPredicted.atPreviousStep():
        if not column.segment.isActive.atCurrStep():
          column.segment.isFalselyPredicted.setForCurrStep(True)
        for synapse in column.segment.synapses:
          if (synapse.isPredicted.atPreviousStep() and not synapse.isConnected.atCurrStep()) or (synapse.isConnected.atCurrStep() and synapse.inputElem.isFalselyPredicted.atCurrStep()):
            synapse.isFalselyPredicted.setForCurrStep(True)

      for cell in column.cells:
        cellIdx = cell.index

        # Update cell's states
        if cellIdx in self.temporalPooler.winnerCells:
          cell.isLearning.setForCurrStep(True)
        if cellIdx in self.temporalPooler.activeCells:
          cell.isActive.setForCurrStep(True)
        if cellIdx in self.temporalPooler.predictiveCells:
          cell.isPredicted.setForCurrStep(True)
        if cell.isPredicted.atPreviousStep() and not cell.isActive.atCurrStep():
          cell.isFalselyPredicted.setForCurrStep(True)

        # Get the indexes of the distal segments of this cell
        segmentsForCell = self.temporalPooler.connections.segmentsForCell(cellIdx)

        # Add the segments that appeared after last iteration
        for segIdx in segmentsForCell:
          # Check if segment already exists in the cell
          segFound = False
          for segment in cell.segments:
            if segment.indexTP == segIdx:
              segFound = True
              break

          # If segment is new, add it to cell
          if not segFound:
            segment = Segment(SegmentType.distal)
            segment.indexTP = segIdx
            cell.segments.append(segment)

        # Update distal segments
        for segment in cell.segments:
          segIdx = segment.indexTP

          # If segment not found in segments indexes returned in last iteration mark it as removed
          if segIdx in segmentsForCell:

            # Update segment's state
            if segIdx in self.temporalPooler.activeSegments:
              segment.isActive.setForCurrStep(True)
            else:
              segment.isActive.setForCurrStep(False)

            # Get the indexes of the synapses of this segment
            synapsesForSegment = self.temporalPooler.connections.synapsesForSegment(segIdx)

            # Add the synapses that appeared after last iteration
            for synIdx in synapsesForSegment:
              # Check if synapse already exists in the segment
              synFound = False
              for synapse in segment.synapses:
                if synapse.indexTP == synIdx:
                  synFound = True
                  break

              # If synapse is new, add it to segment
              if not synFound:
                synapse = Synapse()
                synapse.indexTP = synIdx
                segment.synapses.append(synapse)

            # Update synapses
            for synapse in segment.synapses:
              synIdx = synapse.indexTP

              # If synapse not found in synapses indexes returned in last iteration mark it as removed
              if synIdx in synapsesForSegment:

                # Update synapse's state
                (_, sourceCellAbsIdx, permanence) = self.temporalPooler.connections.dataForSynapse(synIdx)
                synapse.permanence.setForCurrStep(permanence)
                if permanence >= self.distalSynConnectedPerm:
                  synapse.isConnected.setForCurrStep(True)
                else:
                  synapse.isConnected.setForCurrStep(False)

                # Get cell given cell's index
                sourceColIdx = sourceCellAbsIdx / self.numCellsPerColumn
                sourceCellRelIdx = sourceCellAbsIdx % self.numCellsPerColumn
                sourceCell = self.columns[sourceColIdx].cells[sourceCellRelIdx]
                synapse.inputElem = sourceCell
              else:
                synapse.isRemoved.setForCurrStep(True)
          else:
            segment.isRemoved.setForCurrStep(True)
Beispiel #6
0
class Column:
    """
  A class only to group properties related to columns.
  """

    # region Constructor

    def __init__(self):
        """
    Initializes a new instance of this class.
    """

        # region Instance fields

        self.x = -1
        """Position on X axis"""

        self.y = -1
        """Position on Y axis"""

        self.segment = Segment(SegmentType.proximal)
        """Proximal segment of this column"""

        self.cells = []
        """List of cells that compose this column."""

        # region 3d-tree properties (simulation form)

        self.tree3d_x = 0
        self.tree3d_y = 0
        self.tree3d_z = 0

        # endregion

        # endregion

    # endregion

    # region Methods

    def getCell(self, z):
        """
    Return the cell located at given position
    """

        for cell in self.cells:
            if cell.z == z:
                return cell

    def nextStep(self):
        """
    Perfoms actions related to time step progression.
    """

        self.segment.nextStep()
        for cell in self.cells:
            cell.nextStep()

    def calculateStatistics(self):
        """
    Calculate statistics after an iteration.
    """

        self.segment.calculateStatistics()
        for cell in self.cells:
            cell.calculateStatistics()
Beispiel #7
0
  def updateTemporalElements(self):
    """
    Update elements regarding temporal pooler
    """

    # Update cells, distal segments and synapses according to active columns
    for colIdx in range(len(self.columns)):
      column = self.columns[colIdx]

      # Mark proximal segment and its connected synapses as predicted
      if column.segment.isPredicted.atCurrStep():
        for synapse in column.segment.synapses:
          if synapse.isConnected.atCurrStep():
            synapse.isPredicted.setForCurrStep(True)
            synapse.inputElem.isPredicted.setForCurrStep(True)

      # Mark proximal segment and its connected synapses that were predicted but are not active now
      if column.segment.isPredicted.atPreviousStep():
        if not column.segment.isActive.atCurrStep():
          column.segment.isFalselyPredicted.setForCurrStep(True)
        for synapse in column.segment.synapses:
          if (synapse.isPredicted.atPreviousStep() and not synapse.isConnected.atCurrStep()) or (synapse.isConnected.atCurrStep() and synapse.inputElem.isFalselyPredicted.atCurrStep()):
            synapse.isFalselyPredicted.setForCurrStep(True)

      for cell in column.cells:
        cellIdx = cell.index

        # Update cell's states
        if cellIdx in self.temporalPooler.winnerCells:
          cell.isLearning.setForCurrStep(True)
        if cellIdx in self.temporalPooler.activeCells:
          cell.isActive.setForCurrStep(True)
        if cellIdx in self.temporalPooler.predictiveCells:
          cell.isPredicted.setForCurrStep(True)
        if cell.isPredicted.atPreviousStep() and not cell.isActive.atCurrStep():
          cell.isFalselyPredicted.setForCurrStep(True)

        # Get the indexes of the distal segments of this cell
        segmentsForCell = self.temporalPooler.connections.segmentsForCell(cellIdx)

        # Add the segments that appeared after last iteration
        for segIdx in segmentsForCell:
          # Check if segment already exists in the cell
          segFound = False
          for segment in cell.segments:
            if segment.indexTP == segIdx:
              segFound = True
              break

          # If segment is new, add it to cell
          if not segFound:
            segment = Segment(SegmentType.distal)
            segment.indexTP = segIdx
            cell.segments.append(segment)

        # Update distal segments
        for segment in cell.segments:
          segIdx = segment.indexTP

          # If segment not found in segments indexes returned in last iteration mark it as removed
          if segIdx in segmentsForCell:

            # Update segment's state
            if segIdx in self.temporalPooler.activeSegments:
              segment.isActive.setForCurrStep(True)
            else:
              segment.isActive.setForCurrStep(False)

            # Get the indexes of the synapses of this segment
            synapsesForSegment = self.temporalPooler.connections.synapsesForSegment(segIdx)

            # Add the synapses that appeared after last iteration
            for synIdx in synapsesForSegment:
              # Check if synapse already exists in the segment
              synFound = False
              for synapse in segment.synapses:
                if synapse.indexTP == synIdx:
                  synFound = True
                  break

              # If synapse is new, add it to segment
              if not synFound:
                synapse = Synapse()
                synapse.indexTP = synIdx
                segment.synapses.append(synapse)

            # Update synapses
            for synapse in segment.synapses:
              synIdx = synapse.indexTP

              # If synapse not found in synapses indexes returned in last iteration mark it as removed
              if synIdx in synapsesForSegment:

                # Update synapse's state
                synapseData = self.temporalPooler.connections.dataForSynapse(synIdx)
                synapse.permanence.setForCurrStep(synapseData.permanence)
                if synapseData.permanence >= self.distalSynConnectedPerm:
                  synapse.isConnected.setForCurrStep(True)
                else:
                  synapse.isConnected.setForCurrStep(False)

                # Get cell given cell's index
                sourceColIdx = synapseData.presynapticCell / self.numCellsPerColumn
                sourceCellRelIdx = synapseData.presynapticCell % self.numCellsPerColumn
                sourceCell = self.columns[sourceColIdx].cells[sourceCellRelIdx]
                synapse.inputElem = sourceCell
              else:
                synapse.isRemoved.setForCurrStep(True)
          else:
            segment.isRemoved.setForCurrStep(True)
Beispiel #8
0
class Column:
    """
  A class only to group properties related to columns.
  """

    #region Constructor

    def __init__(self):
        """
    Initializes a new instance of this class.
    """

        #region Instance fields

        self.x = -1
        """Position on X axis"""

        self.y = -1
        """Position on Y axis"""

        self.segment = Segment(SegmentType.proximal)
        """Proximal segment of this column"""

        self.cells = []
        """List of cells that compose this column."""

        #region 3d-tree properties (simulation form)

        self.tree3d_x = 0
        self.tree3d_y = 0
        self.tree3d_z = 0

        #endregion

        #endregion

    #endregion

    #region Methods

    def getCell(self, z):
        """
    Return the cell located at given position
    """

        for cell in self.cells:
            if cell.z == z:
                return cell

    def nextStep(self):
        """
    Perfoms actions related to time step progression.
    """

        self.segment.nextStep()
        for cell in self.cells:
            cell.nextStep()

    def calculateStatistics(self):
        """
    Calculate statistics after an iteration.
    """

        self.segment.calculateStatistics()
        for cell in self.cells:
            cell.calculateStatistics()