def init(): # ================= GLOBALIZE VARIABLES ====================== # global te, ti, wee, wei, wie, tempx, tempy global savedWEE, savedWEI, savedWIE, savedTE, savedTI global score, scoreFig, stringPattern, MASK # ===== FOR ALL THE EXCITATORY NEURONS, RANDOMLY ASSIGNED THRESHOLD FOR THEM ==== # for i in range(0, NN_E): te[i] = aux01.randd() * TE_MAX # ===== FOR ALL THE INHIBITORY NEURONS, RANDOMLY ASSIGNED THRESHOLD FOR THEM ==== # for i in range(0, NN_I): ti[i] = aux01.randd() * TI_MAX # ===== FOR ALL E ---> I PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB 1.0 ===== # for i in range(0, NN_I): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_E): wie[i][j] = aux01.randd() sum = sum + wie[i][j] # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_E): if (sum <> 0): wie[i][j] = wie[i][j] / sum # ===== FOR ALL E ---> E PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB pEE ===== # for i in range(0, NN_E): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_E): if ((i <> j) and (aux01.randd() <= pEE)): # >>NO SELF-CONN wee[i][j] = aux01.randd() sum = sum + wee[i][j] else: wee[i][j] = -99.0 # NOT CONNECTED # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_E): if ((sum <> 0.0) and (wee[i][j] >= 0.0)): wee[i][j] = wee[i][j] / sum # ===== FOR ALL I ---> E PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB pEI ===== # for i in range(0, NN_E): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_I): if (aux01.randd() <= pEI): wei[i][j] = aux01.randd() sum = sum + wei[i][j] else: wei[i][j] = -99.0 # NOT CONNECTED # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_I): if ((sum <> 0) and (wei[i][j] >= 0)): wei[i][j] = wei[i][j] / sum # ========== INITIALIZING THE STATE OF EXCITATORY NEURONS TO ZERO ========== # for i in range(0, NN_E): x[0][i] = 0 tempx[0][i] = 0 # ========== INITIALIZING THE STATE OF INHIBITORY NEURONS TO ZERO ========== # for i in range(0, NN_I): y[0][i] = 0 tempy[0][i] = 0 # ========== INITIALIZING THE STATE OF SAVING VARIABLES OF THE WEIGHTS ========== # savedWEE = np.zeros(shape=(3, NN_E, NN_E)) savedWEI = np.zeros(shape=(3, NN_E, NN_I)) savedWIE = np.zeros(shape=(3, NN_I, NN_E)) # ========== INITIALIZING THE STATE OF SAVING VARIABLES OF THE THRESHOLDS ======= # savedTE = np.zeros(shape=(3, NN_E)) savedTI = np.zeros(shape=(3, NN_I)) # ========== INITIALIZING THE VARIABLES USED IN EVOLUTIONARY STEPS =========== # stringPattern = np.zeros(N) score = np.zeros(3) MASK = np.random.binomial(1, 0.5, N) scoreFig = []
def step(t): # ============ GLOBALIZING VARIABLES ============== # global wee, wei, wie, te, ti, x, y # ================ DISPLAY STEPS COUNTING EVERY 100 STEPS ================== # if (t % 100 == 0): print "Running step " + str(t) + " / " + str(STEPS) # =============== INDEX OF ACTIVITY STATES FOR THE LAST AND CURRENT STEP ============== # t0 = (t - 1) % 2 t1 = t % 2 # ================================================================================== # # ============ UPDATING ACTIVITIES OF EXCITATORY NEURONS USING EQ 3.4 ============== # # ================================================================================== # for i in range(0, NN_E): sum1 = 0.0 sum2 = 0.0 # =============== CALCULATING ALL THE E-E CONNECTIONS TO THAT NEURON ============= # for j in range(0, NN_E): if (wee[i][j] >= 0.0): sum1 += wee[i][j] * x[t0][j] # =============== CALCULATING ALL THE I-E CONNECTIONS TO THAT NEURON ============= # for j in range(0, NN_I): if (wei[i][j] >= 0.0): sum2 += wei[i][j] * y[t0][j] # =============== CALCULATING RESULTANT SUMMATION ================ # sum = sum1 - sum2 + math.sqrt(sig2) * aux01.gasdev() # =============== CACULATING SUMMATION BY THE INPUT NEURONS ============ # if (i < NUM_I): sum = sum + inp[i] # =============== OBTAIN ACTIVITY BY COMPARING SUMMATION WITH ITS THRESHOLD ============ # if (sum > te[i]): x[t1][i] = 1 else: x[t1][i] = 0 # ================================================================================== # # ============= UPDATING ACTIVITIES OF INHIBITORY NEURONS USING EQ 3.5 ============= # # ================================================================================== # for i in range(0, NN_I): # INHIBITORY UPDATE (EQ.2) sum1 = 0 # ============== CALCULATING ALL THE E-I CONNECTIONS TO THAT NEURON ================ # for j in range(0, NN_E): sum1 += wie[i][j] * x[t0][j] sum1 += math.sqrt(sig2) * aux01.gasdev() # =============== OBTAIN ACTIVITY BY COMPARING SUMMATION WITH ITS THRESHOLD ============ # if (sum1 > ti[i]): y[t1][i] = 1 else: y[t1][i] = 0 if fix == 0: for i in range(0, NN_E): sum = 0 # ================================================================================== # # ==================== UPDATING E-E WEIGHTS BY STDP (EQ 3.7) ======================= # # ================================================================================== # for j in range(0, NN_E): if ((wee[i][j] > 0.0) and (i <> j)): tt = etaSTDP * (float(x[t1][i]) * float(x[t0][j]) - float(x[t0][i]) * float(x[t1][j])) if (wee[i][j] + tt <= 0): wee[i][j] = -99 else: wee[i][j] = wee[i][j] + tt sum = sum + wee[i][j] # ================================================================================== # # ========================== WEIGHT NORMALISATION (EQ 3.1) ========================= # # ================================================================================== # for j in range(0, NN_E): if ((sum <> 0) and (wee[i][j] > 0.0)): wee[i][j] = wee[i][j] / sum sum = 0 # ================================================================================== # # ================== UPDATING I-E WEIGHTS BY iSTDP (EQ 3.9) ======================== # # ================================================================================== # for j in range(0, NN_I): if (wei[i][j] > 0): tt = -1.0 * etaINHIB * y[t0][j] * (1 - float(x[t1][i])) * ( 1.0 + 1.0 / float(muIP)) if (wei[i][j] + tt <= 0): wei[i][j] = -99 else: wei[i][j] = wei[i][j] + tt sum = sum + wei[i][j] # ================================================================================== # # ========================= WEIGHT NORMALISATION (EQ 3.2) ========================== # # ================================================================================== # for j in range(0, NN_I): if ((sum <> 0) and (wei[i][j] > 0)): wei[i][j] = wei[i][j] / sum # ================================================================================== # # ================== UPDATING THRESHOLD BY IP (EQ 3.10) ============================ # # ================================================================================== # te[i] += etaIP * (float(x[t0][i]) - muIP) if (te[i] < 0): te[i] = 0 # ================================================================================== # # =========== ADD NEW E-E CONNECTION WITH paddEE(STRUCTURAL PLASTICITY) ============ # # ================================================================================== # if (aux01.randd() < paddEE): ind = 0 sum = 0 while (ind == 0): # ============== RANDOM TWO EXCITATORY NEURONS WHICH IS NOT YET CONNECTED =========== # r1 = aux01.randl(NN_E) r2 = aux01.randl(NN_E) if ((wee[r1][r2] == -99) and (r1 <> r2)): # ============= ADD NEW CONNECTION WITH WEIGHT: 0.001 =============== # wee[r1][r2] = 0.001 ind = 1 # ================================================================================== # # ========================= WEIGHT NORMALISATION (EQ 3.1) ========================== # # ================================================================================== # for j in range(0, NN_E): # (RE) NORMALISATION if (wee[r1][j] > 0): sum = sum + wee[r1][j] for j in range(0, NN_E): if ((sum <> 0) and (wee[r1][j] >= 0)): wee[r1][j] = wee[r1][j] / sum
def step(t): # ============ GLOBALIZING VARIABLES ============== # global wee, wei, wie, te, ti, x, y # ================ DISPLAY STEPS COUNTING EVERY 100 STEPS ================== # if (t % 100 == 0): print "Running step " + str(t) + " / " + str(STEPS) # =============== INDEX OF ACTIVITY STATES FOR THE LAST AND CURRENT STEP ============== # t0 = (t-1) % 2 t1 = t % 2 # ================================================================================== # # ============ UPDATING ACTIVITIES OF EXCITATORY NEURONS USING EQ 3.4 ============== # # ================================================================================== # for i in range(0, NN_E): sum1 = 0.0 sum2 = 0.0 # =============== CALCULATING ALL THE E-E CONNECTIONS TO THAT NEURON ============= # for j in range(0, NN_E): if (wee[i][j] >= 0.0): sum1 += wee[i][j] * x[t0][j] # =============== CALCULATING ALL THE I-E CONNECTIONS TO THAT NEURON ============= # for j in range(0, NN_I): if (wei[i][j] >= 0.0): sum2 += wei[i][j] * y[t0][j] # =============== CALCULATING RESULTANT SUMMATION ================ # sum = sum1 - sum2 + math.sqrt(sig2) * aux01.gasdev() # =============== CACULATING SUMMATION BY THE INPUT NEURONS ============ # if (i < NUM_I): sum = sum + inp[i] # =============== OBTAIN ACTIVITY BY COMPARING SUMMATION WITH ITS THRESHOLD ============ # if (sum > te[i]): x[t1][i] = 1 else: x[t1][i] = 0 # ================================================================================== # # ============= UPDATING ACTIVITIES OF INHIBITORY NEURONS USING EQ 3.5 ============= # # ================================================================================== # for i in range(0, NN_I): sum1 = 0 # ============== CALCULATING ALL THE E-I CONNECTIONS TO THAT NEURON ================ # for j in range(0, NN_E): sum1 += wie[i][j] * x[t0][j] sum1 += math.sqrt(sig2) * aux01.gasdev() # =============== OBTAIN ACTIVITY BY COMPARING SUMMATION WITH ITS THRESHOLD ============ # if (sum1 > ti[i]): y[t1][i] = 1 else: y[t1][i] = 0 if fix == 0: for i in range(0, NN_E): sum = 0 # ================================================================================== # # ==================== UPDATING E-E WEIGHTS BY STDP (EQ 3.7) ======================= # # ================================================================================== # for j in range(0, NN_E): if ((wee[i][j] > 0.0) and (i <> j)): tt = etaSTDP * (float(x[t1][i]) * float(x[t0][j]) - float(x[t0][i]) * float(x[t1][j])) if (wee[i][j] + tt <= 0): wee[i][j] = -99 else: wee[i][j] = wee[i][j] + tt sum = sum + wee[i][j] # ================================================================================== # # ========================== WEIGHT NORMALISATION (EQ 3.1) ========================= # # ================================================================================== # for j in range(0, NN_E): if ((sum <> 0) and (wee[i][j] > 0.0)): wee[i][j] = wee[i][j] / sum sum = 0 # ================================================================================== # # ================== UPDATING I-E WEIGHTS BY iSTDP (EQ 3.9) ======================== # # ================================================================================== # for j in range(0, NN_I): if (wei[i][j] > 0): tt = -1.0 * etaINHIB * y[t0][j] * (1-float(x[t1][i])) * (1.0+1.0/float(muIP)) if (wei[i][j] + tt <= 0): wei[i][j] = -99 else: wei[i][j] = wei[i][j] + tt sum = sum + wei[i][j] # ================================================================================== # # ========================= WEIGHT NORMALISATION (EQ 3.2) ========================== # # ================================================================================== # for j in range(0, NN_I): if ((sum <> 0) and (wei[i][j] > 0)): wei[i][j] = wei[i][j] / sum # ================================================================================== # # ================== UPDATING THRESHOLD BY IP (EQ 3.10) ============================ # # ================================================================================== # te[i] += etaIP * (float(x[t0][i]) - muIP) if (te[i] < 0): te[i] = 0 # ================================================================================== # # =========== ADD NEW E-E CONNECTION WITH paddEE(STRUCTURAL PLASTICITY) ============ # # ================================================================================== # if (aux01.randd() < paddEE): ind = 0 sum = 0 while (ind == 0): # ============== RANDOM TWO EXCITATORY NEURONS WHICH IS NOT YET CONNECTED =========== # r1 = aux01.randl(NN_E) r2 = aux01.randl(NN_E) if ((wee[r1][r2] == -99) and (r1 <> r2)): # ============= ADD NEW CONNECTION WITH WEIGHT: 0.001 =============== # wee[r1][r2] = 0.001 ind = 1 # ================================================================================== # # ========================= WEIGHT NORMALISATION (EQ 3.1) ========================== # # ================================================================================== # for j in range(0, NN_E): if (wee[r1][j] > 0): sum = sum + wee[r1][j] for j in range(0, NN_E): if ((sum <> 0) and (wee[r1][j] >= 0)): wee[r1][j] = wee[r1][j] / sum
def init(): # ================= GLOBALIZE VARIABLES ====================== # global te, ti, wee, wei, wie, x, y # ===== FOR ALL THE EXCITATORY NEURONS, RANDOMLY ASSIGNED THRESHOLD FOR THEM ==== # for i in range(0, NN_E): te[i] = aux01.randd() * TE_MAX # ===== FOR ALL THE INHIBITORY NEURONS, RANDOMLY ASSIGNED THRESHOLD FOR THEM ==== # for i in range(0, NN_I): ti[i] = aux01.randd() * TI_MAX # ===== FOR ALL E ---> I PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB 1.0 ===== # for i in range(0, NN_I): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_E): wie[i][j] = aux01.randd() sum = sum + wie[i][j] # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_E): if (sum <> 0): wie[i][j] = wie[i][j] / sum # ===== FOR ALL E ---> E PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB pEE ===== # for i in range(0, NN_E): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_E): if ((i <> j) and (aux01.randd() <= pEE)): # >>NO SELF-CONN wee[i][j] = aux01.randd() sum = sum + wee[i][j] else: wee[i][j] = -99.0 # NOT CONNECTED # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_E): if ((sum <> 0.0) and (wee[i][j] >= 0.0)): wee[i][j] = wee[i][j] / sum # ===== FOR ALL I ---> E PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB pEI ===== # for i in range(0, NN_E): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_I): if (aux01.randd() <= pEI): wei[i][j] = aux01.randd() sum = sum + wei[i][j] else: wei[i][j] = -99.0 # NOT CONNECTED # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_I): if ((sum <> 0) and (wei[i][j] >= 0)): wei[i][j] = wei[i][j] / sum # ========== INITIALIZING THE STATE OF EXCITATORY NEURONS TO ZERO ========== # for i in range(0, NN_E): x[0][i] = 0 # ========== INITIALIZING THE STATE OF INHIBITORY NEURONS TO ZERO ========== # for i in range(0, NN_I): y[0][i] = 0
def init(): # ================= GLOBALIZE VARIABLES ====================== # global te, ti, wee, wei, wie, tempx, tempy global savedWEE, savedWEI, savedWIE, savedTE, savedTI global score, scoreFig, stringPattern, MASK # ===== FOR ALL THE EXCITATORY NEURONS, RANDOMLY ASSIGNED THRESHOLD FOR THEM ==== # for i in range(0, NN_E): te[i] = aux01.randd() * TE_MAX # ===== FOR ALL THE INHIBITORY NEURONS, RANDOMLY ASSIGNED THRESHOLD FOR THEM ==== # for i in range(0, NN_I): ti[i] = aux01.randd() * TI_MAX # ===== FOR ALL E ---> I PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB 1.0 ===== # for i in range(0, NN_I): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_E): wie[i][j] = aux01.randd() sum = sum + wie[i][j] # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_E): if (sum <> 0): wie[i][j] = wie[i][j] / sum # ===== FOR ALL E ---> E PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB pEE ===== # for i in range(0, NN_E): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_E): if ((i <> j) and (aux01.randd() <= pEE)): # >>NO SELF-CONN wee[i][j] = aux01.randd() sum = sum + wee[i][j] else: wee[i][j] = -99.0 # NOT CONNECTED # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_E): if ((sum <> 0.0) and (wee[i][j] >= 0.0)): wee[i][j] = wee[i][j] / sum # ===== FOR ALL I ---> E PAIRS, RANDOMLY ASSIGNED WEIGHT BETWEEN THEM WITH PROB pEI ===== # for i in range(0, NN_E): sum = 0 # ======== SUMMING THE WEIGHTS ======== # for j in range(0, NN_I): if (aux01.randd() <= pEI): wei[i][j] = aux01.randd() sum = sum + wei[i][j] else: wei[i][j] = -99.0 # NOT CONNECTED # ===== PERFORMING NORMALIZATION ====== # for j in range(0, NN_I): if ((sum <> 0) and (wei[i][j] >= 0)): wei[i][j] = wei[i][j] / sum # ========== INITIALIZING THE STATE OF EXCITATORY NEURONS TO ZERO ========== # for i in range(0, NN_E): x[0][i] = 0 tempx[0][i] = 0 # ========== INITIALIZING THE STATE OF INHIBITORY NEURONS TO ZERO ========== # for i in range(0, NN_I): y[0][i] = 0 tempy[0][i] = 0 # ========== INITIALIZING THE STATE OF SAVING VARIABLES OF THE WEIGHTS ========== # savedWEE = np.zeros(shape=(3, NN_E, NN_E)) savedWEI = np.zeros(shape=(3, NN_E, NN_I)) savedWIE = np.zeros(shape=(3, NN_I, NN_E)) # ========== INITIALIZING THE STATE OF SAVING VARIABLES OF THE THRESHOLDS ======= # savedTE = np.zeros(shape=(3, NN_E)) savedTI = np.zeros(shape=(3, NN_I)) # ========== INITIALIZING THE VARIABLES USED IN EVOLUTIONARY STEPS =========== # stringPattern = np.zeros(N) score = np.zeros(3) MASK = np.random.binomial(1,0.5,N) scoreFig = []