def fixed_assembly_recip_proj(n=100000, k=317, p=0.01, beta=0.05): b = brain.Brain(p, save_winners=True) b.add_stimulus("stimA", k) b.add_area("A", n, k, beta) # Will project fixes A into B b.add_area("B", n, k, beta) b.project({"stimA": ["A"]}, {}) print("A.w=" + str(b.areas["A"].w)) for i in xrange(20): b.project({"stimA": ["A"]}, {"A": ["A"]}) print("A.w=" + str(b.areas["A"].w)) # Freeze assembly in A and start projecting A <-> B b.areas["A"].fix_assembly() b.project({}, {"A": ["B"]}) for i in xrange(20): b.project({}, {"A": ["B"], "B": ["A", "B"]}) print("B.w=" + str(b.areas["B"].w)) # If B has stabilized, this implies that the A->B direction is stable. # Therefore to test that this "worked" we should check that B->A restores A print("Before B->A, A.w=" + str(b.areas["A"].w)) b.areas["A"].unfix_assembly() b.project({}, {"B": ["A"]}) print("After B->A, A.w=" + str(b.areas["A"].w)) for i in xrange(20): b.project({}, {"B": ["A"], "A": ["A"]}) print("A.w=" + str(b.areas["A"].w)) overlaps = bu.get_overlaps(b.areas["A"].saved_winners[-22:], 0, percentage=True) print(overlaps)
def pattern_com_repeated(n=100000, k=317, p=0.05, beta=0.05, project_iter=12, alpha=0.4, trials=3, max_recurrent_iter=10, resample=False): b = brain.Brain(p) b.add_stimulus("stim", k) b.add_area("A", n, k, beta) b.project({"stim": ["A"]}, {}) for i in range(project_iter - 1): b.project({"stim": ["A"]}, {"A": ["A"]}) subsample_size = int(k * alpha) rounds_to_completion = [] # pick random subset of the neurons to fire subsample = random.sample(b.areas["A"].winners, subsample_size) for trail in range(trials): if resample: subsample = random.sample(b.areas["A"].winners, subsample_size) b.areas["A"].winners = subsample rounds = 0 while True: rounds += 1 b.project({}, {"A": ["A"]}) if (b.areas["A"].num_first_winners == 0) or (rounds == max_recurrent_iter): break rounds_to_completion.append(rounds) saved_winners = b.areas["A"].saved_winners overlaps = bu.get_overlaps(saved_winners, project_iter - 1, percentage=True) return overlaps, rounds_to_completion