@@ -388,9 +388,10 @@ void C3::ADMMStep(const VectorXd& x0, vector<VectorXd>* delta,
388388 }
389389}
390390
391- void C3::WarmStartQP (const Eigen::VectorXd& x0, int admm_iteration) {
392-
393- if (admm_iteration == 0 ) return ; // No warm start for the first iteration
391+ void C3::SetInitialGuessQP (const Eigen::VectorXd& x0, int admm_iteration) {
392+ prog_.SetInitialGuess (x_[0 ], x0);
393+ if (!warm_start_ || admm_iteration == 0 )
394+ return ; // No warm start for the first iteration
394395 int index = solve_time_ / lcs_.dt ();
395396 double weight = (solve_time_ - index * lcs_.dt ()) / lcs_.dt ();
396397 for (int i = 0 ; i < N_ - 1 ; ++i) {
@@ -407,8 +408,8 @@ void C3::WarmStartQP(const Eigen::VectorXd& x0, int admm_iteration) {
407408 prog_.SetInitialGuess (x_[N_], warm_start_x_[admm_iteration - 1 ][N_]);
408409}
409410
410- void C3::ProcessQPResults (const MathematicalProgramResult& result,
411- int admm_iteration, bool is_final_solve) {
411+ void C3::StoreQPResults (const MathematicalProgramResult& result,
412+ int admm_iteration, bool is_final_solve) {
412413 for (int i = 0 ; i < N_; ++i) {
413414 if (is_final_solve) {
414415 x_sol_->at (i) = result.GetSolution (x_[i]);
@@ -449,8 +450,7 @@ vector<VectorXd> C3::SolveQP(const VectorXd& x0, const vector<MatrixXd>& G,
449450 -2 * G.at (i) * WD.at (i));
450451 }
451452
452- prog_.SetInitialGuess (x_[0 ], x0);
453- if (warm_start_) WarmStartQP (x0, admm_iteration);
453+ SetInitialGuessQP (x0, admm_iteration);
454454
455455 MathematicalProgramResult result = osqp_.Solve (prog_);
456456
@@ -459,7 +459,7 @@ vector<VectorXd> C3::SolveQP(const VectorXd& x0, const vector<MatrixXd>& G,
459459 result.get_solution_result ());
460460 }
461461
462- ProcessQPResults (result, admm_iteration, is_final_solve);
462+ StoreQPResults (result, admm_iteration, is_final_solve);
463463
464464 return *z_sol_;
465465}
@@ -476,7 +476,7 @@ vector<VectorXd> C3::SolveProjection(const vector<MatrixXd>& U,
476476 }
477477
478478#pragma omp parallel for num_threads( \
479- options_.num_threads ) if (use_parallelization_in_projection_)
479+ options_.num_threads ) if (use_parallelization_in_projection_)
480480 for (int i = 0 ; i < N_; ++i) {
481481 if (warm_start_) {
482482 if (i == N_ - 1 ) {
0 commit comments