@@ -1361,8 +1361,7 @@ double PDLPSolver::computePrimalFeasibility(
13611361 }
13621362 }
13631363
1364- return linalg::vectorNorm (primal_residual) /
1365- scaling_.getConstraintBoundScaling ();
1364+ return linalg::vectorNorm (primal_residual);
13661365}
13671366
13681367void PDLPSolver::computeDualSlacks (const std::vector<double >& dualResidual,
@@ -1448,8 +1447,7 @@ double PDLPSolver::computeDualFeasibility(const std::vector<double>& ATy_vector,
14481447 }
14491448 }
14501449
1451- double dual_feasibility = linalg::vectorNorm (dual_residual) /
1452- scaling_.getObjectiveVectorScaling ();
1450+ double dual_feasibility = linalg::vectorNorm (dual_residual);
14531451
14541452 return dual_feasibility;
14551453}
@@ -1494,7 +1492,7 @@ PDLPSolver::computeDualityGap(const std::vector<double>& x,
14941492double PDLPSolver::computeDualObjective (const std::vector<double >& y,
14951493 const std::vector<double >& dSlackPos,
14961494 const std::vector<double >& dSlackNeg) {
1497- double dual_obj = 0.0 ;
1495+ double dual_obj = lp_. offset_ ;
14981496
14991497 // Compute b'y (or rhs'y in cuPDLP notation)
15001498 for (HighsInt i = 0 ; i < lp_.num_row_ ; ++i) {
@@ -1515,10 +1513,7 @@ double PDLPSolver::computeDualObjective(const std::vector<double>& y,
15151513 }
15161514 }
15171515
1518- return dual_obj /
1519- (scaling_.getConstraintBoundScaling () *
1520- scaling_.getObjectiveVectorScaling ()) +
1521- lp_.offset_ ;
1516+ return dual_obj;
15221517}
15231518
15241519bool PDLPSolver::checkConvergence (
@@ -1541,21 +1536,18 @@ bool PDLPSolver::checkConvergence(
15411536 results.dual_feasibility = dual_feasibility;
15421537
15431538 // Compute objectives
1544- double primal_obj = 0.0 ;
1539+ double primal_obj = lp_. offset_ ;
15451540 for (HighsInt i = 0 ; i < lp_.num_col_ ; ++i) {
15461541 primal_obj += lp_.col_cost_ [i] * x[i];
15471542 }
1548- primal_obj /=
1549- scaling_.getConstraintBoundScaling () *
1550- scaling_.getObjectiveVectorScaling ();
1551- results.primal_obj = primal_obj + lp_.offset_ ;
1543+ results.primal_obj = primal_obj;
15521544
15531545 // Pass the now-populated slack vectors to computeDualObjective
15541546 double dual_obj = computeDualObjective (y, dSlackPos, dSlackNeg);
15551547 results.dual_obj = dual_obj;
15561548
15571549 // Compute duality gap
1558- double duality_gap = results. primal_obj - dual_obj;
1550+ double duality_gap = primal_obj - dual_obj;
15591551 results.duality_gap = std::abs (duality_gap);
15601552
15611553 // Compute relative gap (matching cuPDLP formula)
@@ -1944,11 +1936,10 @@ void PDLPSolver::unscaleSolution(std::vector<double>& x,
19441936 y_current_ = y;
19451937
19461938 const std::vector<double >& col_scale = scaling_.getColScaling ();
1947- const double objective_scale = scaling_.getObjectiveVectorScaling ();
19481939 if (!dSlackPos_.empty () && col_scale.size () == dSlackPos_.size ()) {
19491940 for (size_t i = 0 ; i < dSlackPos_.size (); ++i) {
1950- dSlackPos_[i] *= col_scale[i] / objective_scale ;
1951- dSlackNeg_[i] *= col_scale[i] / objective_scale ;
1941+ dSlackPos_[i] *= col_scale[i];
1942+ dSlackNeg_[i] *= col_scale[i];
19521943 }
19531944 }
19541945}
@@ -2839,16 +2830,13 @@ bool PDLPSolver::checkConvergenceGpu(const HighsInt iter, const double* d_x,
28392830 cudaMemcpyDeviceToHost, gpu_stream_));
28402831 CUDA_CHECK (cudaStreamSynchronize (gpu_stream_));
28412832
2842- const double constraint_scale = scaling_.getConstraintBoundScaling ();
2843- const double objective_scale = scaling_.getObjectiveVectorScaling ();
2844- const double combined_scale = constraint_scale * objective_scale;
28452833 double primal_feas_sq = h_results[0 ];
28462834 double dual_feas_sq = h_results[1 ];
2847- double primal_obj = h_results[2 ] / combined_scale + lp_.offset_ ;
2848- double dual_obj = h_results[3 ] / combined_scale + lp_.offset_ ;
2835+ double primal_obj = h_results[2 ] + lp_.offset_ ;
2836+ double dual_obj = h_results[3 ] + lp_.offset_ ;
28492837
2850- results.primal_feasibility = std::sqrt (primal_feas_sq) / constraint_scale ;
2851- results.dual_feasibility = std::sqrt (dual_feas_sq) / objective_scale ;
2838+ results.primal_feasibility = std::sqrt (primal_feas_sq);
2839+ results.dual_feasibility = std::sqrt (dual_feas_sq);
28522840 results.primal_obj = primal_obj;
28532841 results.dual_obj = dual_obj;
28542842
0 commit comments