Skip to content

Commit 50b94fe

Browse files
authored
Merge pull request #58 from fabinsch/fix-eps-rel
Fix epsilon relative stopping criteria
2 parents bef4da9 + f255f1f commit 50b94fe

File tree

4 files changed

+6
-61
lines changed

4 files changed

+6
-61
lines changed

include/proxsuite/proxqp/dense/helpers.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,9 +438,6 @@ setup( //
438438
Eigen::Matrix<T, Eigen::Dynamic, 1>::Zero(qpmodel.n_in).array() -
439439
T(1.E20));
440440

441-
qpwork.primal_feasibility_rhs_1_eq = infty_norm(qpmodel.b);
442-
qpwork.primal_feasibility_rhs_1_in_u = infty_norm(qpwork.u_scaled);
443-
qpwork.primal_feasibility_rhs_1_in_l = infty_norm(qpwork.l_scaled);
444441
qpwork.dual_feasibility_rhs_2 = infty_norm(qpmodel.g);
445442

446443
switch (preconditioner_status) {

include/proxsuite/proxqp/dense/solver.hpp

Lines changed: 3 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,13 +1015,8 @@ qp_solve( //
10151015

10161016
T rhs_pri(qpsettings.eps_abs);
10171017
if (qpsettings.eps_rel != 0) {
1018-
rhs_pri +=
1019-
qpsettings.eps_rel *
1020-
std::max(
1021-
std::max(primal_feasibility_eq_rhs_0, primal_feasibility_in_rhs_0),
1022-
std::max(std::max(qpwork.primal_feasibility_rhs_1_eq,
1023-
qpwork.primal_feasibility_rhs_1_in_u),
1024-
qpwork.primal_feasibility_rhs_1_in_l));
1018+
rhs_pri += qpsettings.eps_rel * std::max(primal_feasibility_eq_rhs_0,
1019+
primal_feasibility_in_rhs_0);
10251020
}
10261021
bool is_primal_feasible = primal_feasibility_lhs <= rhs_pri;
10271022

@@ -1037,36 +1032,6 @@ qp_solve( //
10371032
bool is_dual_feasible = dual_feasibility_lhs <= rhs_dua;
10381033

10391034
if (qpsettings.verbose) {
1040-
/* TO PUT IN DEBUG MODE
1041-
std::cout << "---------------it : " << iter
1042-
<< " primal residual : " <<
1043-
primal_feasibility_lhs
1044-
<< " dual residual : " <<
1045-
dual_feasibility_lhs << std::endl; std::cout << "bcl_eta_ext : " <<
1046-
bcl_eta_ext
1047-
<< " bcl_eta_in : " << bcl_eta_in
1048-
<< " rho : " << qpresults.info.rho
1049-
<< " bcl_mu_eq : " <<
1050-
qpresults.info.mu_eq
1051-
<< " bcl_mu_in : " <<
1052-
qpresults.info.mu_in << std::endl; std::cout << "qpsettings.eps_abs " <<
1053-
qpsettings.eps_abs
1054-
<< " qpsettings.eps_rel *rhs "
1055-
<< qpsettings.eps_rel *
1056-
std::max(
1057-
std::max(
1058-
primal_feasibility_eq_rhs_0,
1059-
primal_feasibility_in_rhs_0),
1060-
std::max(
1061-
std::max(
1062-
qpwork.primal_feasibility_rhs_1_eq,
1063-
qpwork.primal_feasibility_rhs_1_in_u),
1064-
qpwork.primal_feasibility_rhs_1_in_l))
1065-
<< std::endl;
1066-
std::cout << "is_primal_feasible " << is_primal_feasible
1067-
<< " is_dual_feasible " <<
1068-
is_dual_feasible << std::endl;
1069-
*/
10701035

10711036
ruiz.unscale_primal_in_place(VectorViewMut<T>{ from_eigen, qpresults.x });
10721037
ruiz.unscale_dual_in_place_eq(
@@ -1164,11 +1129,7 @@ qp_solve( //
11641129
primal_feasibility_lhs_new <=
11651130
(qpsettings.eps_abs +
11661131
qpsettings.eps_rel *
1167-
std::max(
1168-
std::max(primal_feasibility_eq_rhs_0, primal_feasibility_in_rhs_0),
1169-
std::max(std::max(qpwork.primal_feasibility_rhs_1_eq,
1170-
qpwork.primal_feasibility_rhs_1_in_u),
1171-
qpwork.primal_feasibility_rhs_1_in_l)));
1132+
std::max(primal_feasibility_eq_rhs_0, primal_feasibility_in_rhs_0));
11721133
qpresults.info.pri_res = primal_feasibility_lhs_new;
11731134
if (is_primal_feasible) {
11741135
T dual_feasibility_lhs_new(dual_feasibility_lhs);

include/proxsuite/proxqp/dense/workspace.hpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,6 @@ struct Workspace
7373

7474
//// Relative residuals constants
7575

76-
T primal_feasibility_rhs_1_eq;
77-
T primal_feasibility_rhs_1_in_u;
78-
T primal_feasibility_rhs_1_in_l;
7976
T dual_feasibility_rhs_2;
8077
T correction_guess_rhs_g;
8178
T correction_guess_rhs_b;
@@ -194,9 +191,6 @@ struct Workspace
194191
rhs.setZero();
195192
err.setZero();
196193

197-
primal_feasibility_rhs_1_eq = 0;
198-
primal_feasibility_rhs_1_in_u = 0;
199-
primal_feasibility_rhs_1_in_l = 0;
200194
dual_feasibility_rhs_2 = 0;
201195
correction_guess_rhs_g = 0;
202196
correction_guess_rhs_b = 0;

include/proxsuite/proxqp/sparse/solver.hpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -519,9 +519,6 @@ qp_solve(Results<T>& results,
519519
{ proxsuite::linalg::sparse::from_eigen, u_scaled_e },
520520
};
521521

522-
T const primal_feasibility_rhs_1_eq = infty_norm(data.b);
523-
T const primal_feasibility_rhs_1_in_u = infty_norm(data.u);
524-
T const primal_feasibility_rhs_1_in_l = infty_norm(data.l);
525522
T const dual_feasibility_rhs_2 = infty_norm(data.g);
526523

527524
// auto ldl_col_ptrs = work.ldl_col_ptrs_mut();
@@ -756,13 +753,9 @@ qp_solve(Results<T>& results,
756753
auto is_primal_feasible = [&](T primal_feasibility_lhs) -> bool {
757754
T rhs_pri = settings.eps_abs;
758755
if (settings.eps_rel != 0) {
759-
rhs_pri += settings.eps_rel * std::max({
760-
primal_feasibility_eq_rhs_0,
761-
primal_feasibility_in_rhs_0,
762-
primal_feasibility_rhs_1_eq,
763-
primal_feasibility_rhs_1_in_l,
764-
primal_feasibility_rhs_1_in_u,
765-
});
756+
rhs_pri +=
757+
settings.eps_rel * std::max({ primal_feasibility_eq_rhs_0,
758+
primal_feasibility_in_rhs_0 });
766759
}
767760
return primal_feasibility_lhs <= rhs_pri;
768761
};

0 commit comments

Comments
 (0)