Skip to content

Commit bf39e41

Browse files
Bambadejcarpent
authored andcommitted
split dulity gap relative stopping criterion into separate terms
1 parent 2d209ea commit bf39e41

File tree

4 files changed

+6
-8
lines changed

4 files changed

+6
-8
lines changed

include/proxsuite/proxqp/dense/solver.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,8 +1087,8 @@ qp_solve( //
10871087
qpresults.info.rho = rho_new;
10881088
}
10891089
if (is_dual_feasible) {
1090-
if (qpresults.info.duality_gap <=
1091-
qpsettings.eps_abs * rhs_duality_gap) {
1090+
if (qpresults.info.duality_gap <= qpsettings.eps_abs +
1091+
(qpsettings.eps_abs + qpsettings.eps_rel) * rhs_duality_gap) {
10921092
qpresults.info.status = QPSolverOutput::PROXQP_SOLVED;
10931093
break;
10941094
}
@@ -1169,8 +1169,8 @@ qp_solve( //
11691169
std::max(dual_feasibility_rhs_1, qpwork.dual_feasibility_rhs_2)));
11701170

11711171
if (is_dual_feasible) {
1172-
if (qpresults.info.duality_gap <=
1173-
qpsettings.eps_abs * rhs_duality_gap) {
1172+
if (qpresults.info.duality_gap <= qpsettings.eps_abs +
1173+
(qpsettings.eps_abs + qpsettings.eps_rel) * rhs_duality_gap) {
11741174
qpresults.info.status = QPSolverOutput::PROXQP_SOLVED;
11751175
break;
11761176
}

include/proxsuite/proxqp/dense/utils.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,6 @@ global_dual_residual(const Results<T>& qpresults,
415415
duality_gap += zl;
416416
ruiz.scale_dual_in_place_in(VectorViewMut<T>{ from_eigen, qpresults.z });
417417
duality_gap /= sqrt_max_dim; // in order to get an a-dimensional duality gap
418-
rhs_duality_gap += 1.;
419418
}
420419

421420
} // namespace dense

include/proxsuite/proxqp/sparse/solver.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ qp_solve(Results<T>& results,
839839
}
840840
if (is_primal_feasible(primal_feasibility_lhs) &&
841841
is_dual_feasible(dual_feasibility_lhs)) {
842-
if (results.info.duality_gap <= settings.eps_abs * rhs_duality_gap) {
842+
if (results.info.duality_gap <= settings.eps_abs + (settings.eps_rel+settings.eps_abs)* rhs_duality_gap) {
843843
results.info.pri_res = primal_feasibility_lhs;
844844
results.info.dua_res = dual_feasibility_lhs;
845845
results.info.status = QPSolverOutput::PROXQP_SOLVED;
@@ -1230,7 +1230,7 @@ qp_solve(Results<T>& results,
12301230

12311231
if (is_primal_feasible(primal_feasibility_lhs_new) &&
12321232
is_dual_feasible(dual_feasibility_lhs_new)) {
1233-
if (results.info.duality_gap <= settings.eps_abs * rhs_duality_gap) {
1233+
if (results.info.duality_gap <= settings.eps_abs + (settings.eps_abs+settings.eps_rel) * rhs_duality_gap) {
12341234
results.info.pri_res = primal_feasibility_lhs_new;
12351235
results.info.dua_res = dual_feasibility_lhs_new;
12361236
results.info.status = QPSolverOutput::PROXQP_SOLVED;

include/proxsuite/proxqp/sparse/utils.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,6 @@ unscaled_primal_dual_residual(
678678
precond.scale_dual_in_place_in({ proxsuite::proxqp::from_eigen, z_e });
679679
results.info.duality_gap /=
680680
sqrt_max_dim; // in order to get an a-dimensional duality gap
681-
rhs_duality_gap += 1.;
682681
}
683682

684683
{

0 commit comments

Comments
 (0)