Hey, thanks for your interest!
In this case we don’t have an error function, instead we recieve the error from the invironment (the simulator). cte² is just a way to accumulate squares of cte throughout the epoch’s iterations for subsequent computing of rmse:
currentEpochError_ = sqrt(epochCumulativeError_ / epochLength_);
and use it as a metric of the error to calculate partial derivatives. Then we drive (send control actions) via
PID::TotalError() function for some number of timesteps with the updated parameters, collecting cte² along the way, and evaluate again.
It might be confusing that the function that essentially calculates new steering value is called
PID::TotalError(), but that’s what it is called in the starter code and I just didn’t rename.