Skip to content

Commit 034ff66

Browse files
committed
Documenting complementarity violations
1 parent e8e644f commit 034ff66

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

highs/lp_data/HighsInterface.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2896,6 +2896,15 @@ HighsStatus Highs::lpKktCheck(const HighsLp& lp, const std::string& message) {
28962896
int(info.num_relative_dual_residual_errors),
28972897
info.max_relative_dual_residual_error, dual_residual_tolerance);
28982898
}
2899+
if (info.num_complementarity_violations) {
2900+
if (!this->options_.output_flag) {
2901+
printf("Highs::lpKktCheck With basis num_complementarity_violations = %d\n",
2902+
int(info.num_complementarity_violations));
2903+
this->options_.output_flag = true;
2904+
this->writeSolution("", 1);
2905+
this->lpKktCheck(lp, message);
2906+
}
2907+
}
28992908
assert(info.num_complementarity_violations == 0);
29002909
assert(info.primal_dual_objective_error <= optimality_tolerance);
29012910
if (have_residual_errors) {

highs/lp_data/HighsSolution.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -982,8 +982,14 @@ bool getComplementarityViolations(const HighsLp& lp,
982982
}
983983
const double dual_residual = std::fabs(dual);
984984
const double complementarity_violation = primal_residual * dual_residual;
985-
if (complementarity_violation > optimality_tolerance)
985+
if (complementarity_violation > optimality_tolerance) {
986+
printf("getComplementarityViolations: %s %d has (primal / dual) residual (%g / %g) violation = %g\n",
987+
is_col ? "column" : "row",
988+
is_col ? int(iVar) : int(iRow),
989+
primal_residual, dual_residual,
990+
complementarity_violation);
986991
num_complementarity_violation++;
992+
}
987993
max_complementarity_violation =
988994
std::max(complementarity_violation, max_complementarity_violation);
989995
}

0 commit comments

Comments
 (0)