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)
示例#7
0
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