73int main(
int argc,
char **argv){
74 std::default_random_engine generator;
75 std::normal_distribution<DDSPC::realT> distribution(0, 1.0);
77 int num_steps = 10000;
85 for(
int i=0; i<num_steps; i++){
86 x[i] = std::sin(2 * 3.14 * 20.0 * i / 1000.0);
94 int num_actuators = 1;
97 measurement.resize(num_actuators,1);
100 exploration_noise.resize(num_actuators,1);
104 std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
105 std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
107 double command_calc = 0.0;
108 double update_system = 0.0;
109 double update_controller = 0.0;
110 for(
int i=0; i < (num_steps - 1); i++){
117 exploration_noise(0,0) = 0.1 * distribution(generator);
119 exploration_noise(0,0) = 0.0;
122 err[i] = x[i] + signal[i];
123 signal[i+1] = signal[i] - gain * err[i] + exploration_noise(0, 0);
125 err_pc[i] = x[i] + signal_pc[i];
126 measurement(0,0) = err_pc[i];
128 begin = std::chrono::steady_clock::now();
130 end = std::chrono::steady_clock::now();
131 command_calc += std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
133 signal_pc[i + 1] = signal_pc[i] + new_command(0,0);
135 if((i+1) > (num_future + num_history)){
136 begin = std::chrono::steady_clock::now();
138 end = std::chrono::steady_clock::now();
139 update_system += std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
141 begin = std::chrono::steady_clock::now();
143 end = std::chrono::steady_clock::now();
144 update_controller += std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count();
148 std::cout << command_calc / num_steps / 1000.0 <<
" " << update_system / num_steps / 1000.0 <<
" " << update_controller / num_steps / 1000.0 << std::endl;
150 std::cout<<
standard_dev(x, num_steps, 500) << std::endl;
151 std::cout<<
standard_dev(err, num_steps, 500) << std::endl;
152 std::cout<<
standard_dev(err_pc, num_steps, 500) << std::endl;