42int main(
int argc,
char **argv){
43 std::default_random_engine generator;
44 std::normal_distribution<DDSPC::realT> distribution(0, 1.0);
46 int num_steps = 10000;
54 for(
int i=0; i<num_steps; i++){
55 x[i] = std::sin(2 * 3.14 * 20.0 * i / 1000.0);
63 int num_actuators = 1;
66 measurement.resize(num_actuators,1);
69 exploration_noise.resize(num_actuators,1);
73 std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
74 std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
76 double command_calc = 0.0;
77 double update_system = 0.0;
78 double update_controller = 0.0;
79 for(
int i=0; i < (num_steps - 1); i++){
86 exploration_noise(0,0) = 0.1 * distribution(generator);
88 exploration_noise(0,0) = 0.0;
91 err[i] = x[i] + signal[i];
92 signal[i+1] = signal[i] - gain * err[i] + exploration_noise(0, 0);
94 err_pc[i] = x[i] + signal_pc[i];
95 measurement(0,0) = err_pc[i];
97 begin = std::chrono::steady_clock::now();
99 end = std::chrono::steady_clock::now();
100 command_calc += std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
102 signal_pc[i + 1] = signal_pc[i] + new_command(0,0);
104 if((i+1) > (num_future + num_history)){
105 begin = std::chrono::steady_clock::now();
107 end = std::chrono::steady_clock::now();
108 update_system += std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
110 begin = std::chrono::steady_clock::now();
112 end = std::chrono::steady_clock::now();
113 update_controller += std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
117 std::cout << command_calc / num_steps / 1000.0 <<
" " << update_system / num_steps / 1000.0 <<
" " << update_controller / num_steps / 1000.0 << std::endl;
119 std::cout<<
standard_dev(x, num_steps, 500) << std::endl;
120 std::cout<<
standard_dev(err, num_steps, 500) << std::endl;
121 std::cout<<
standard_dev(err_pc, num_steps, 500) << std::endl;