Example #1
0
  /**
   * Initializes the specified {@link Connections} object which contains the memory and structural
   * anatomy this spatial pooler uses to implement its algorithms.
   *
   * @param c a {@link Connections} object
   */
  public void init(Connections c) {
    if (c.getNumActiveColumnsPerInhArea() == 0
        && (c.getLocalAreaDensity() == 0 || c.getLocalAreaDensity() > 0.5)) {
      throw new InvalidSPParamValueException("Inhibition parameters are invalid");
    }

    c.doSpatialPoolerPostInit();
    initMatrices(c);
    connectAndConfigureInputs(c);
  }
Example #2
0
  /**
   * Performs inhibition. This method calculates the necessary values needed to actually perform
   * inhibition and then delegates the task of picking the active columns to helper functions.
   *
   * @param c the {@link Connections} matrix
   * @param overlaps an array containing the overlap score for each column. The overlap score for a
   *     column is defined as the number of synapses in a "connected state" (connected synapses)
   *     that are connected to input bits which are turned on.
   * @return
   */
  public int[] inhibitColumns(Connections c, double[] overlaps) {
    overlaps = Arrays.copyOf(overlaps, overlaps.length);

    double density;
    double inhibitionArea;
    if ((density = c.getLocalAreaDensity()) <= 0) {
      inhibitionArea = Math.pow(2 * c.getInhibitionRadius() + 1, c.getColumnDimensions().length);
      inhibitionArea = Math.min(c.getNumColumns(), inhibitionArea);
      density = c.getNumActiveColumnsPerInhArea() / inhibitionArea;
      density = Math.min(density, 0.5);
    }

    // Add our fixed little bit of random noise to the scores to help break ties.
    // ArrayUtils.d_add(overlaps, c.getTieBreaker());

    if (c.getGlobalInhibition()
        || c.getInhibitionRadius() > ArrayUtils.max(c.getColumnDimensions())) {
      return inhibitColumnsGlobal(c, overlaps, density);
    }

    return inhibitColumnsLocal(c, overlaps, density);
  }