@@ -442,19 +442,19 @@ PostSolveRetcode PDLPSolver::postprocess(HighsSolution& solution) {
442442
443443 // Compute Ax using only the original columns (not slack variables)
444444 for (int col = 0 ; col < original_num_col_; ++col) {
445- double x_val = x_current_[col]; // Use unscaled x values
446-
447- for (int el = orig_matrix.start_ [col];
448- el < orig_matrix. start_ [col + 1 ]; ++el) {
449- int row = orig_matrix.index_ [el];
450- double a_val = orig_matrix.value_ [el];
451- ax_original[row] += a_val * x_val;
452- }
445+ double x_val = x_current_[col]; // Use unscaled x values
446+
447+ for (int el = orig_matrix.start_ [col]; el < orig_matrix. start_ [col + 1 ];
448+ ++el) {
449+ int row = orig_matrix.index_ [el];
450+ double a_val = orig_matrix.value_ [el];
451+ ax_original[row] += a_val * x_val;
452+ }
453453 }
454454
455455 // Now ax_original contains the correct row activity values
456456 for (int orig_row = 0 ; orig_row < original_lp_->num_row_ ; ++orig_row) {
457- solution.row_value [orig_row] = ax_original[orig_row];
457+ solution.row_value [orig_row] = ax_original[orig_row];
458458 }
459459
460460 // 6. Recover Dual Column Values (Reduced Costs)
@@ -566,16 +566,14 @@ void PDLPSolver::solve(std::vector<double>& x, std::vector<double>& y) {
566566
567567 hipdlpTimerStart (kHipdlpClockConvergenceCheck );
568568 // Compute residuals for current iterate
569- bool current_converged =
570- checkConvergence (iter, x_current_, y_current_, Ax_cache_, ATy_cache_,
571- params_.tolerance , current_results, " [L]" ,
572- dSlackPos_, dSlackNeg_);
569+ bool current_converged = checkConvergence (
570+ iter, x_current_, y_current_, Ax_cache_, ATy_cache_,
571+ params_.tolerance , current_results, " [L]" , dSlackPos_, dSlackNeg_);
573572
574573 // Compute residuals for average iterate
575- bool average_converged =
576- checkConvergence (iter, x_avg_, y_avg_, Ax_avg, ATy_avg,
577- params_.tolerance , average_results, " [A]" ,
578- dSlackPosAvg_, dSlackNegAvg_);
574+ bool average_converged = checkConvergence (
575+ iter, x_avg_, y_avg_, Ax_avg, ATy_avg, params_.tolerance ,
576+ average_results, " [A]" , dSlackPosAvg_, dSlackNegAvg_);
579577 hipdlpTimerStop (kHipdlpClockConvergenceCheck );
580578
581579 debugPdlpIterHeaderLog (debug_pdlp_log_file_);
@@ -907,14 +905,14 @@ void PDLPSolver::computeDualSlacks(const std::vector<double>& dualResidual,
907905 }
908906}
909907
910- double PDLPSolver::computeDualFeasibility (
911- const std::vector< double >& ATy_vector, std::vector<double >& dSlackPos,
912- std::vector<double >& dSlackNeg) {
908+ double PDLPSolver::computeDualFeasibility (const std::vector< double >& ATy_vector,
909+ std::vector<double >& dSlackPos,
910+ std::vector<double >& dSlackNeg) {
913911 std::vector<double > dualResidual (lp_.num_col_ , 0.0 );
914912 // dualResidual = c-A'y
915913 dualResidual = linalg::vector_subtrac (lp_.col_cost_ , ATy_vector);
916914 double dualResidualNorm = linalg::vector_norm (dualResidual);
917-
915+
918916 // Call the refactored function to populate dSlackPos and dSlackNeg
919917 computeDualSlacks (dualResidual, dSlackPos, dSlackNeg);
920918
@@ -985,9 +983,9 @@ PDLPSolver::computeDualityGap(const std::vector<double>& x,
985983 cTx);
986984}
987985
988- double PDLPSolver::computeDualObjective (
989- const std::vector< double >& y, const std::vector<double >& dSlackPos,
990- const std::vector<double >& dSlackNeg) {
986+ double PDLPSolver::computeDualObjective (const std::vector< double >& y,
987+ const std::vector<double >& dSlackPos,
988+ const std::vector<double >& dSlackNeg) {
991989 double dual_obj = lp_.offset_ ;
992990
993991 // Compute b'y (or rhs'y in cuPDLP notation)
@@ -1012,15 +1010,12 @@ double PDLPSolver::computeDualObjective(
10121010 return dual_obj;
10131011}
10141012
1015- bool PDLPSolver::checkConvergence (const int iter, const std::vector<double >& x,
1016- const std::vector<double >& y,
1017- const std::vector<double >& ax_vector,
1018- const std::vector<double >& aty_vector,
1019- double epsilon, SolverResults& results,
1020- const char * type,
1021- // Add slack vectors as non-const references
1022- std::vector<double >& dSlackPos,
1023- std::vector<double >& dSlackNeg) {
1013+ bool PDLPSolver::checkConvergence (
1014+ const int iter, const std::vector<double >& x, const std::vector<double >& y,
1015+ const std::vector<double >& ax_vector, const std::vector<double >& aty_vector,
1016+ double epsilon, SolverResults& results, const char * type,
1017+ // Add slack vectors as non-const references
1018+ std::vector<double >& dSlackPos, std::vector<double >& dSlackNeg) {
10241019 // computeDualSlacks is now called inside computeDualFeasibility
10251020
10261021 // Compute primal feasibility
0 commit comments