示例#1
0
    // вычисляем всю входящую стимуляцию клетки, приходящую как по афферентам,
    // так и по коллатеральным связям от соседних пирамид.
    public void IntegrateAllIncomingSignals( int[] afferent_data, InhibitionCell inhibition )
    {
        // суммируем афференты
          double sum_a = 0;
          for( int i = 0; i < afferents.Count; ++i )
          {
           afferents[i].Accept( afferent_data );
           sum_a += afferents[i].GetA();
          }

          // коллатерали
          for( int i = 0; i < collaterals.Count; ++i )
          {
           collaterals[i].Accept();
           sum_a += collaterals[i].GetA();
          }

          // теперь определим текущий порог
          double theta = inhibition.GetTheta() + inhibition.GetThetaNoise();

          // если суммарная стимуляция входов больше порога, и если нейрон не в состоянии рефракции - генерируется спайк.
          if( a == 0.0 && sum_a > theta )
           a_next = 1.0;
          else
           a_next = 0.0;

          return;
    }
示例#2
0
    public void AcceptInput( int[] afferent_data, InhibitionCell inhibition )
    {
        for( int i = 0; i < pyramids.Count; ++i )
           pyramids[i].IntegrateAllIncomingSignals( afferent_data, inhibition );

          for( int i = 0; i < pyramids.Count; ++i )
           pyramids[i].Tick_A();

          return;
    }
示例#3
0
    // s - каждая пирамида получает столько сигналов от других пирамид в миниколонке
    public void Init( int total_input, int s, int m, InhibitionCell inhibition )
    {
        int N = total_input; // общее число входных сигналов
          int r = 7; // столько входных сигналов получает каждая пирамида в микроколонке

          pyramids = new List<PyramidalCell>();
          for( int i = 0; i < m; ++i )
          {
           PyramidalCell p = new PyramidalCell();
           p.inhibition = inhibition;
           p.AttachToInputs( total_input, r, s );

           pyramids.Add( p );
          }

          for( int i = 0; i < pyramids.Count; ++i )
          {
           pyramids[i].AttachCollaterals( pyramids, s, i );
          }

          // тормозной нейрон собирает активность со всех пирамид всех микроколонок
          inhibition.Attach( this );

          return;
    }
示例#4
0
    int[] ni_a; // активность входных нейронов в течение одной итерации

    #endregion Fields

    #region Constructors

    public MacroColumn(
        int RF_size, // длина входного вектора данных
        int k // число микроколонок в одной макроколонке
        )
    {
        int s = 15; // каждая пирамида получает столько сигналов от других пирамид в миниколонке

          inhibition = new InhibitionCell( m, s );

          columns = new List<MiniColumn>();
          for( int i = 0; i < k; ++i )
          {
           MiniColumn c = new MiniColumn();
           c.Init( RF_size, s, m, inhibition );
           columns.Add( c );
          }

          current_input = new int[RF_size];
          ni_a = new int[RF_size];
    }