예제 #1
0
    def test_addTwoFunctions(self):
        function_generator = FunctionGenerator()
        function_generator.addFunction([10, 4, 3])
        function_generator.addFunction([-5, 4, 3])

        expected_output = '10x^2 + 4x + 3\n' \
                          '-5x^2 + 4x + 3\n'
        self.assertEqual(expected_output, function_generator.to_string())
예제 #2
0
    def test_generateOneSample(self):
        function_generator = FunctionGenerator()
        a, b, c = 10, 4, 3
        function_generator.addFunction([a, b, c])
        testing_set = function_generator.generate()

        first_function_index = 0
        self.assertEqual([-1], testing_set.X.T[first_function_index])
        self.assertEqual([0.5], testing_set.Y.T[first_function_index])
예제 #3
0
 def __generate_functions(self, args):
     self.__add_function_to_generator(args.f_1)
     self.__add_function_to_generator(args.f_2)
     self.__add_function_to_generator(args.f_3)
     training_function_generator = FunctionGenerator()
     for function in self.__training_functions:
         training_function_generator.addFunction(function)
     required_samples = args.SampleNumber
     training_set = training_function_generator.generate(required_samples)
     input_number = output_number = self.__input_number
     return input_number, output_number, required_samples, training_set
예제 #4
0
    def test_generate100ContinuousSamples(self):
        function_generator = FunctionGenerator()
        # f(x) = x
        function_generator.addFunction([1, 0])

        sample_number = 100
        testing_set = function_generator.generate(sample_number)

        first_function_idx = 0
        for sample_idx in range(sample_number):
            self.assertAlmostEqual(
                sample_idx / sample_number,
                testing_set.Y.T[first_function_idx][sample_idx],
                delta=0.011)
예제 #5
0
    def test_generateTripleSampleTripleFunction(self):
        function_generator = FunctionGenerator()
        function_number = 3
        base_factor = 10
        for x in range(function_number):
            # f(x) = 2x^1 + 10
            function_generator.addFunction([2, base_factor])

        sample_number = 3
        testing_set = function_generator.generate(sample_number)

        for function_idx in range(function_number):
            self.assertAlmostEqual(0., testing_set.Y.T[function_idx][0])
            self.assertAlmostEqual(.5, testing_set.Y.T[function_idx][1])
            self.assertAlmostEqual(1., testing_set.Y.T[function_idx][2])
예제 #6
0
    def test_conductTestM7(self):
        print('Conduct M7')
        input_number = output_number = 3
        parameter_m = 7

        training_functions = [
            [-3, 0, -7, 21, 0, -8, 0.4],  # -3x6 – 7x4 + 21x3 – 8x + 0.4
            [1, 0, 0, -10, 0, 0, 0.2],  # x^6 -x10x^2 + 0.2
            [-1, 1, 0, 0, 4, 0, -10],  # -2x^6 + x^5 + 4x^2 - 10
        ]
        self.assertEqual(
            parameter_m, len(training_functions[0]),
            'This tests requires {}-parameter functions'.format(parameter_m))

        training_function_generator = FunctionGenerator()
        for function in training_functions:
            training_function_generator.addFunction(function)

        print('Used functions: \n', training_function_generator.to_string())
        required_samples = 130
        training_set = training_function_generator.generate(required_samples)

        ratio = 5
        fitting_set_x, fitting_set_y, testing_set_x, testing_set_y = self.__mlp_utils.split_data_set(
            input_number, output_number, ratio, required_samples, training_set)

        self.__train_and_plot(fitting_set_x, fitting_set_y, testing_set_x,
                              testing_set_y, parameter_m)
예제 #7
0
    def test_conductTestM5(self):
        print('Conduct M5')
        input_number = output_number = 3
        parameter_m = 5

        training_functions = [
            [-7, 21, 0, -8, 0.1],  # -7x4 + 21x3 – 8x + 24
            [-20, 0, 0, 0, 2],  # -20x^4 + 2
            [3, 0, -4, 0, -9],  # 3x^4 - 4x^2 - 9
        ]

        self.assertEqual(
            parameter_m, len(training_functions[0]),
            'This tests requires {}-parameter functions'.format(parameter_m))

        training_function_generator = FunctionGenerator()
        for function in training_functions:
            training_function_generator.addFunction(function)

        print('Used functions: \n', training_function_generator.to_string())
        required_samples = 130
        training_set = training_function_generator.generate(required_samples)

        ratio = 5
        fitting_set_x, fitting_set_y, testing_set_x, testing_set_y = self.__mlp_utils.split_data_set(
            input_number, output_number, ratio, required_samples, training_set)

        self.__train_and_plot(fitting_set_x, fitting_set_y, testing_set_x,
                              testing_set_y, parameter_m)
예제 #8
0
    def test_conductTestM3(self):
        print('Conduct M3')
        input_number = output_number = 3
        parameter_m = 3

        training_functions = [
            [1, 1, 0],  # x^2 + x
            [1, -1, 0],  # x^2 - x
            [-2, 2, 0]  # -2x^2 + 2x
        ]

        self.assertEqual(
            parameter_m, len(training_functions[0]),
            'This tests requires {}-parameter functions'.format(parameter_m))

        training_function_generator = FunctionGenerator()
        for function in training_functions:
            training_function_generator.addFunction(function)

        print('Used functions: \n', training_function_generator.to_string())
        required_samples = 130
        training_set = training_function_generator.generate(required_samples)

        ratio = 5
        fitting_set_x, fitting_set_y, testing_set_x, testing_set_y = self.__mlp_utils.split_data_set(
            input_number, output_number, ratio, required_samples, training_set)

        self.__train_and_plot(fitting_set_x, fitting_set_y, testing_set_x,
                              testing_set_y, parameter_m)
예제 #9
0
    def test_generateOneSampleDoubleFunction(self):
        function_generator = FunctionGenerator()
        a, b, c = 10., 4., 3.
        function_generator.addFunction([a, b, c])
        function_generator.addFunction([a, b, c + 1.])
        testing_set = function_generator.generate()

        first_sample_indxe = 0
        first_function_index = 0
        self.assertAlmostEqual(
            -1., testing_set.X.T[first_function_index][first_sample_indxe])
        self.assertAlmostEqual(
            0., testing_set.Y.T[first_function_index][first_sample_indxe])

        second_function_index = 1
        self.assertAlmostEqual(
            -1., testing_set.X.T[second_function_index][first_sample_indxe])
        self.assertAlmostEqual(
            1., testing_set.Y.T[second_function_index][first_sample_indxe])
예제 #10
0
    def test_addOneFunction(self):
        function_generator = FunctionGenerator()
        function_generator.addFunction([10, 4, 3])

        expected_output = "10x^2 + 4x + 3\n"
        self.assertEqual(expected_output, function_generator.to_string())