def brute_force_t1(): print "Now attempting to find \mathbb{G}_{T=1} by brute-force simulation..." num = 25 (impossible,suboptimal,optimal) = ([],[],[]) (basis0,basis1,basis2) = (np.array([0,1,1]), np.array([1,0,1]), np.array([1,1,0])) (c0,c1,c2) = np.meshgrid(np.linspace(0,1,num), np.linspace(0,1,num), np.linspace(0,1,num)) (c0,c1,c2) = (c0.ravel(),c1.ravel(),c2.ravel()) print "We must iterate through " + str(len(c0)) + " simulated points ... " # The case of i=0 is when all the components are zero. for i in range(1,len(c0)): if i % 100000 == 0: print "Now on point " + str(i) p = c0[i]*basis0 + c1[i]*basis1 + c2[i]*basis2 w = np.array([c0[i], c1[i], c2[i]]) w = w / np.sum(w) six_points = par.get_six_points(p, w, False) result = position_t0(six_points) if result == "Impossible": impossible.append(p) elif result == "Suboptimal": suboptimal.append(p) else: optimal.append(p) print "Number of impossible, suboptimal, and optimal points: {0}, {1}, {2}.".format( len(impossible),len(suboptimal),len(optimal)) # Next step is to plot. There are several ways we can do this. plt3d = plt.figure().gca(projection='3d') x_coordinates = [point[0] for point in impossible] y_coordinates = [point[1] for point in impossible] z_coordinates = [point[2] for point in impossible] plt3d.plot_surface(x_coordinates, y_coordinates, z_coordinates) plt.xlabel('X axis') plt.ylabel('Y axis') plt.show()
np.array([0,2,2]),np.array([2,0,2]),np.array([2,2,0]), np.array([1.5,1.5,1./3]),np.array([1./3,1.5,1.5]),np.array([1.5,1./3,1.5])] (basis0,basis1,basis2) = (np.array([0,2,2]), np.array([2,0,2]), np.array([2,2,0])) rationals = par.generate_rationals(30, 1) print "There are a total of " + str(len(rationals)) + " possible values for a single basis... " points_tested = 0 for first in range(0, len(rationals)): for second in range(first, len(rationals)): for third in range(second, len(rationals)): (c0,c1,c2) = (rationals[first],rationals[second],rationals[third]) p = c0*basis0 + c1*basis1 + c2*basis2 if np.sum(p) < 2: continue w = np.array([c0, c1, c2]) w = w / np.sum(w) six_points = par.get_six_points(p, w, False) points_tested += 1 if points_tested % 250000 == 0: print "Points tested: {}.".format(points_tested) done = False for s in six_points: if par.position_t1(s) == "Impossible": done = True break if not done: for s in six_points: if par.position_t1(s) == "Optimal": symmetrical_points = replicate(p) for pt in symmetrical_points: optimal.append(pt) done = True