def test_spread_rand_rand(self): # random input to rand N = self.N mesh = Mesh(N, mesh_type='triangular', initialization='random', M=None) input_values = npr.random((N, 1)) output_target = normalize_vec(npr.random((N, 1))) TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) TO.optimize(algorithm='spread') # mesh.plot_powers(); plt.show() self.check_power(mesh, output_target)
def test_updown_1_1(self): # uniform to uniform N = self.N mesh = Mesh(N, mesh_type='triangular', initialization='random', M=None) input_values = self.one output_target = self.one TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) TO.optimize(algorithm='up_down') # mesh.plot_powers(); plt.show() self.check_power(mesh, output_target)
def test_spread_top_top(self): # top input to top N = self.N mesh = Mesh(N, mesh_type='triangular', initialization='random', M=None) input_values = self.top output_target = self.top TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) TO.optimize(algorithm='spread') # mesh.plot_powers(); plt.show() self.check_power(mesh, output_target)
def test_spread_1_mid(self): # uniform to middle N = self.N mesh = Mesh(N, mesh_type='triangular', initialization='random', M=None) input_values = self.one output_target = self.mid TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) TO.optimize(algorithm='spread') # mesh.plot_powers(); plt.show() self.check_power(mesh, output_target)
def test_updown_rand_top(self): # random input to top N = self.N mesh = Mesh(N, mesh_type='triangular', initialization='random', M=None) input_values = npr.random((N, 1)) output_target = self.top TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) TO.optimize(algorithm='up_down') # mesh.plot_powers(); plt.show() self.check_power(mesh, output_target)
def test_updown_top_mid(self): # top input to middle N = self.N mesh = Mesh(N, mesh_type='triangular', initialization='random', M=None) input_values = self.top output_target = self.mid TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) TO.optimize(algorithm='up_down') # mesh.plot_powers(); plt.show() self.check_power(mesh, output_target)
input_values = npr.random((N, 1)) f, (ax1, ax2) = plt.subplots(2, constrained_layout=True, figsize=(5, 5)) # couple light in and look at powers throughout mesh mesh.input_couple(input_values) im1 = plot_powers(mesh, ax=ax1) colorbar(im1) ax1.set_title('power distribution before optimizing') # target output complex amplitude output_target = np.ones((N, 1)) # define an optimizer over the triangular mesh TO = TriangleOptimizer(mesh, input_values=input_values, output_target=output_target) # optimize the mesh by pushing power to top port and redistributing TO.optimize(algorithm='up_down') # can also try the 'spread' algorithm, which distributes power as much as possible TO.optimize(algorithm='spread') # look at powers after optimizing im2 = plot_powers(mesh, ax=ax2) colorbar(im2) ax2.set_title('power distribution after optimizing') """ NEXT OPTIMIZE A CLEMENTS MESH """ # create a clements mesh