Example #1
0
def turing_erase(n=50000, k=100, p=0.01, beta=0.05, r=1.0, bigger_factor=20):
    b = brain.Brain(p, save_winners=True)
    # Much smaller stimulus, similar to lower p from stimulus into A
    smaller_k = int(r * k)
    b.add_stimulus("stim", smaller_k)
    b.add_area("A", n, bigger_factor * k, beta)
    b.add_area("B", n, bigger_factor * k, beta)
    b.add_area("C", n, bigger_factor * k, beta)
    b.update_plasticities(area_update_map={
        "A": [("B", 0.8), ("C", 0.8), ("A", 0.01)],
        "B": [("A", 0.8), ("B", 0.8)],
        "C": [("A", 0.8), ("C", 0.8)]
    },
                          stim_update_map={"A": [("stim", 0.05)]})
    b.project({"stim": ["A"]}, {})
    t = 1
    while True:
        b.project({"stim": ["A"]}, {"A": ["A"]})
        if (b.areas["B"].num_first_winners <=
                1) and (b.areas["A"].num_first_winners <= 1):
            print("proj(stim, A) stabilized after " + str(t) + " rounds")
            break
        t += 1

    b.project({"stim": ["A"]}, {"A": ["A", "B"]})
    t = 1
    while True:
        b.project({"stim": ["A"]}, {"A": ["A", "B"], "B": ["B", "A"]})
        print("Num new winners in A " + str(b.areas["A"].num_first_winners))
        if (b.areas["B"].num_first_winners <=
                1) and (b.areas["A"].num_first_winners <= 1):
            print("recip_project(A,B) stabilized after " + str(t) + " rounds")
            break
        t += 1
    A_after_proj_B = b.areas["A"].winners

    b.project({"stim": ["A"]}, {"A": ["A", "C"]})
    t = 1
    while True:
        b.project({"stim": ["A"]}, {"A": ["A", "C"], "C": ["C", "A"]})
        print("Num new winners in A " + str(b.areas["A"].num_first_winners))
        if (b.areas["C"].num_first_winners <=
                1) and (b.areas["A"].num_first_winners <= 1):
            print("recip_project(A,C) stabilized after " + str(t) + " rounds")
            break
        t += 1
    A_after_proj_C = b.areas["A"].winners

    # Check final conditions
    b.project({}, {"A": ["B"]})
    B_after_erase = b.areas["B"].saved_winners[-1]
    B_before_erase = b.areas["B"].saved_winners[-2]
    B_overlap = bu.overlap(B_after_erase, B_before_erase)
    print("Overlap of B after erase and with y is " + str(B_overlap) + "\n")
    A_overlap = bu.overlap(A_after_proj_B, A_after_proj_C)
    print("Overlap of A after proj(B) vs after proj(C) is " + str(A_overlap) +
          "\n")
Example #2
0
def overlap_grand_sim(n=100000,k=317,p=0.01,beta=0.05,min_iter=10,max_iter=30):
	b = brain.Brain(p, save_winners=True)
	b.add_stimulus("stimA",k)
	b.add_area("A",n,k,beta)
	b.add_stimulus("stimB",k)
	b.add_area("B",n,k,beta)
	b.add_area("C",n,k,beta)
	b.add_area("D",n,k,0)

	b.project({"stimA":["A"],"stimB":["B"]},{})
	# Create assemblies A and B to stability
	for i in range(10):
		b.project({"stimA":["A"],"stimB":["B"]},
			{"A":["A"],"B":["B"]})
	b.project({"stimA":["A"]},{"A":["A","C"]})
	# Project A->C
	for i in range(10):
		b.project({"stimA":["A"]},
			{"A":["A","C"],"C":["C"]})
	# Project B->C
	b.project({"stimB":["B"]},{"B":["B","C"]})
	for i in range(10):
		b.project({"stimB":["B"]},
			{"B":["B","C"],"C":["C"]})
	# Project both A,B to C
	b.project({"stimA":["A"],"stimB":["B"]},
		{"A":["A","C"],"B":["B","C"]})
	for i in range(min_iter-2):
		b.project({"stimA":["A"],"stimB":["B"]},
				{"A":["A","C"],"B":["B","C"],"C":["C"]})
	results = {}
	for i in range(min_iter,max_iter+1):
		b.project({"stimA":["A"],"stimB":["B"]},
				{"A":["A","C"],"B":["B","C"],"C":["C"]})
		b_copy1 = copy.deepcopy(b)
		b_copy2 = copy.deepcopy(b)
		# in copy 1, project just A
		b_copy1.project({"stimA":["A"]},{})
		b_copy1.project({},{"A":["C"]})
		# in copy 2, project just B
		b_copy2.project({"stimB":["B"]},{})
		b_copy2.project({},{"B":["C"]})
		intersection = bu.overlap(b_copy1.areas["C"].winners, b_copy2.areas["C"].winners)
		assembly_overlap = float(intersection)/float(k)

		# projecting into D
		b_copy1.project({},{"C":["D"]})
		b_copy1.project({"stimB":["B"]},{})
		b_copy1.project({},{"B":["C"]})
		b_copy1.project({},{"C":["D"]})
		D_saved_winners = b_copy1.areas["D"].saved_winners
		proj_intersection = bu.overlap(D_saved_winners[0], D_saved_winners[1])
		proj_overlap = float(proj_intersection)/float(k)

		print("t=" + str(i) + " : " + str(assembly_overlap) + " -> " + str(proj_overlap) + "\n")
		results[assembly_overlap] = proj_overlap
	return results
Example #3
0
def overlap_sim(n=100000, k=317, p=0.05, beta=0.1, project_iter=10):
    b = brain.Brain(p, save_winners=True)
    b.add_stimulus("stimA", k)
    b.add_area("A", n, k, beta)
    b.add_stimulus("stimB", k)
    b.add_area("B", n, k, beta)
    b.add_area("C", n, k, beta)
    b.add_area("D", n, k, 0.0)  # final project test area
    b.project({"stimA": ["A"], "stimB": ["B"]}, {})
    # Create assemblies A and B to stability
    for i in xrange(9):
        b.project({"stimA": ["A"], "stimB": ["B"]}, {"A": ["A"], "B": ["B"]})
    b.project({"stimA": ["A"]}, {"A": ["A", "C"]})
    # Project A->C
    for i in xrange(9):
        b.project({"stimA": ["A"]}, {"A": ["A", "C"], "C": ["C"]})
    # Project B->C
    b.project({"stimB": ["B"]}, {"B": ["B", "C"]})
    for i in xrange(9):
        b.project({"stimB": ["B"]}, {"B": ["B", "C"], "C": ["C"]})
    # Project both A,B to C
    b.project({
        "stimA": ["A"],
        "stimB": ["B"]
    }, {
        "A": ["A", "C"],
        "B": ["B", "C"]
    })
    for i in xrange(project_iter):
        b.project({
            "stimA": ["A"],
            "stimB": ["B"]
        }, {
            "A": ["A", "C"],
            "B": ["B", "C"],
            "C": ["C"]
        })
    # Project just B
    b.project({"stimB": ["B"]}, {"B": ["B", "C"]})
    # compute overlap
    intersection = bu.overlap(b.areas["C"].saved_winners[-1],
                              b.areas["C"].saved_winners[9])
    assembly_overlap = float(intersection) / float(k)

    b.project({}, {"C": ["D"]})
    # Project just A
    b.project({"stimA": ["A"]}, {"A": ["A", "C"]})
    b.project({}, {"C": ["D"]})
    D_saved_winners = b.areas["D"].saved_winners
    proj_intersection = bu.overlap(D_saved_winners[0], D_saved_winners[1])
    proj_overlap = float(proj_intersection) / float(k)

    return assembly_overlap, proj_overlap
Example #4
0
def larger_k(n=10000,k=100,p=0.01,beta=0.05, bigger_factor=10):
	b = brain.Brain(p, save_winners=True)
	b.add_stimulus("stim", k)
	b.add_area("A",n,k,beta)
	b.add_area("B",n,bigger_factor*k,beta)
	b.update_plasticities(area_update_map={"A":[("B", 0.8), ("A", 0.0)],
											"B":[("A", 0.8), ("B", 0.8)]})
	b.project({"stim":["A"]},{})
	t=1
	while True:
		b.project({"stim":["A"]},{"A":["A"]})
		print("A total w is " + str(b.areas["A"].support_size))
		if (b.areas["B"].num_first_winners <= 1) and (b.areas["A"].num_first_winners <= 1):
			print("proj(stim, A) stabilized after " + str(t) + " rounds")
			break
		t += 1
	A_after_proj = b.areas["A"].winners

	b.project({"stim":["A"]},{"A":["A","B"]})
	t=1
	while True:
		b.project({"stim":["A"]},{"A":["A","B"], "B":["B", "A"]})
		print(("Num new winners in A " + str(b.areas["A"].num_first_winners)))
		print(("Num new winners in B " + str(b.areas["B"].num_first_winners)))
		if (b.areas["B"].num_first_winners <= 1) and (b.areas["A"].num_first_winners <= 1):
			print("recip_project(A,B) stabilized after " + str(t) + " rounds")
			break
		t += 1
	print("Final statistics") 
	print("A.w = " + str(b.areas["A"].support_size))
	print("B.w = " + str(b.areas["B"].support_size))
	A_after_B = b.areas["A"].saved_winners[-1]
	o = bu.overlap(A_after_proj, A_after_B)
	print("Overlap is " + str(o))
Example #5
0
def pattern_com_iterations(n=100000,
                           k=317,
                           p=0.01,
                           beta=0.05,
                           alpha=0.4,
                           comp_iter=8,
                           min_iter=20,
                           max_iter=30):
    b = brain.Brain(p)
    b.add_stimulus("stim", k)
    b.add_area("A", n, k, beta)
    b.project({"stim": ["A"]}, {})
    for i in xrange(min_iter - 2):
        b.project({"stim": ["A"]}, {"A": ["A"]})
    results = {}
    subsample_size = int(k * alpha)
    subsample = random.sample(b.areas["A"].winners, subsample_size)
    for i in xrange(min_iter, max_iter + 1):
        b.project({"stim": ["A"]}, {"A": ["A"]})
        b_copy = copy.deepcopy(b)
        b_copy.areas["A"].winners = subsample
        for j in xrange(comp_iter):
            b_copy.project({}, {"A": ["A"]})
        o = bu.overlap(b_copy.areas["A"].winners, b.areas["A"].winners)
        results[i] = float(o) / float(k)
    return results
Example #6
0
def pattern_com_alphas(
        n=100000,
        k=317,
        p=0.01,
        beta=0.05,
        alphas=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
        project_iter=25,
        comp_iter=5):
    b = brain.Brain(p)
    b.add_stimulus("stim", k)
    b.add_area("A", n, k, beta)
    b.project({"stim": ["A"]}, {})
    for i in xrange(project_iter - 1):
        b.project({"stim": ["A"]}, {"A": ["A"]})
    results = {}
    A_winners = b.areas["A"].winners
    for alpha in alphas:
        # pick random subset of the neurons to fire
        subsample_size = int(k * alpha)
        b_copy = copy.deepcopy(b)
        subsample = random.sample(b_copy.areas["A"].winners, subsample_size)
        b_copy.areas["A"].winners = subsample
        for i in xrange(comp_iter):
            b_copy.project({}, {"A": ["A"]})
        final_winners = b_copy.areas["A"].winners
        o = bu.overlap(final_winners, A_winners)
        results[alpha] = float(o) / float(k)
    return results
Example #7
0
def association_grand_sim(n=100000, k=317, p=0.01, beta=0.05, min_iter=10, max_iter=20):
    b = brain.Brain(p)
    b.add_stimulus("stimA", k)
    b.add_area("A", n, k, beta)
    b.add_stimulus("stimB", k)
    b.add_area("B", n, k, beta)
    b.add_area("C", n, k, beta)
    b.project({"stimA": ["A"], "stimB": ["B"]}, {})
    # Create assemblies A and B to stability
    for i in range(9):
        b.project({"stimA": ["A"], "stimB": ["B"]},
                  {"A": ["A"], "B": ["B"]})
    b.project({"stimA": ["A"]}, {"A": ["A", "C"]})
    # Project A->C
    for i in range(9):
        b.project({"stimA": ["A"]},
                  {"A": ["A", "C"], "C": ["C"]})
    # Project B->C
    b.project({"stimB": ["B"]}, {"B": ["B", "C"]})
    for i in range(9):
        b.project({"stimB": ["B"]},
                  {"B": ["B", "C"], "C": ["C"]})
    # Project both A,B to C
    b.project({"stimA": ["A"], "stimB": ["B"]},
              {"A": ["A", "C"], "B": ["B", "C"]})
    for i in range(min_iter - 2):
        b.project({"stimA": ["A"], "stimB": ["B"]},
                  {"A": ["A", "C"], "B": ["B", "C"], "C": ["C"]})
    results = {}
    for i in range(min_iter, max_iter + 1):
        b.project({"stimA": ["A"], "stimB": ["B"]},
                  {"A": ["A", "C"], "B": ["B", "C"], "C": ["C"]})
        b_copy1 = copy.deepcopy(b)
        b_copy2 = copy.deepcopy(b)
        # in copy 1, project just A
        b_copy1.project({"stimA": ["A"]}, {})
        b_copy1.project({}, {"A": ["C"]})
        # in copy 2, project just B
        b_copy2.project({"stimB": ["B"]}, {})
        b_copy2.project({}, {"B": ["C"]})
        o = bu.overlap(b_copy1.areas["C"].winners, b_copy2.areas["C"].winners)
        results[i] = float(o) / float(k)
    return results