Vector<double> Car::calculate_dependent_variables_dots(const NeuralNetwork& neural_network, const Vector<double>& variables) const { const double time = variables[0]; // const double position = variables[1]; const double velocity = variables[2]; const Vector<double> inputs(1, time); const Vector<double> outputs = neural_network.calculate_outputs(inputs); const double acceleration = outputs[0]; const double deceleration = outputs[1]; const double position_dot = velocity; const double velocity_dot = acceleration + deceleration; Vector<double> dependent_variables_dots(dependent_variables_number, 0.0); dependent_variables_dots[0] = position_dot; dependent_variables_dots[1] = velocity_dot; return(dependent_variables_dots); }
void NeuralNetworkTest::test_calculate_outputs(void) { message += "test_calculate_outputs\n"; NeuralNetwork nn; unsigned inputs_number; unsigned outputs_number; Vector<unsigned> architecture; Vector<double> inputs; Vector<double> outputs; unsigned parameters_number; Vector<double> parameters; // Test nn.set(3, 4, 2); nn.initialize_parameters(0.0); inputs.set(3, 0.0); outputs = nn.calculate_outputs(inputs); assert_true(outputs == 0.0, LOG); // Test nn.set(1, 1, 1); nn.initialize_parameters(0.0); inputs.set(1, 0.0); outputs = nn.calculate_outputs(inputs); assert_true(outputs == 0.0, LOG); // Test nn.set(1, 1); inputs.set(1); inputs.randomize_normal(); parameters = nn.arrange_parameters(); assert_true( nn.calculate_outputs(inputs) == nn.calculate_outputs(inputs, parameters), LOG); // Test nn.set(4, 3, 5); inputs.set(4, 0.0); parameters_number = nn.count_parameters_number(); parameters.set(parameters_number, 0.0); outputs = nn.calculate_outputs(inputs, parameters); assert_true(outputs.size() == 5, LOG); assert_true(outputs == 0.0, LOG); // Test architecture.set(5); architecture.randomize_uniform(5, 10); nn.set(architecture); inputs_number = nn.get_inputs_pointer()->get_inputs_number(); outputs_number = nn.get_outputs_pointer()->get_outputs_number(); inputs.set(inputs_number, 0.0); parameters_number = nn.count_parameters_number(); parameters.set(parameters_number, 0.0); outputs = nn.calculate_outputs(inputs, parameters); assert_true(outputs.size() == outputs_number, LOG); assert_true(outputs == 0.0, LOG); }