Skip to content

Commit 36882f0

Browse files
committed
Removed force_dual_feasibility (which was always false) and minimal_truncation (which was always true) from HighsSolution.cpp
1 parent 90c38a0 commit 36882f0

File tree

1 file changed

+7
-50
lines changed

1 file changed

+7
-50
lines changed

src/lp_data/HighsSolution.cpp

Lines changed: 7 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,6 @@ void getKktFailures(const HighsOptions& options, const HighsLp& lp,
265265
lower = lp.row_lower_[iRow];
266266
upper = lp.row_upper_[iRow];
267267
value = solution.row_value[iRow];
268-
// @FlipRowDual -solution.row_dual[iRow]; became solution.row_dual[iRow];
269268
if (have_dual_solution) dual = solution.row_dual[iRow];
270269
if (have_basis) status = basis.row_status[iRow];
271270
integrality = HighsVarType::kContinuous;
@@ -349,7 +348,6 @@ void getKktFailures(const HighsOptions& options, const HighsLp& lp,
349348
} else {
350349
primal_negative_sum[iRow] -= term;
351350
}
352-
// @FlipRowDual += became -=
353351
if (have_dual_solution) {
354352
double term = -solution.row_dual[iRow] * Avalue;
355353
if (term > 0) {
@@ -362,45 +360,10 @@ void getKktFailures(const HighsOptions& options, const HighsLp& lp,
362360
}
363361
}
364362

365-
if (have_dual_solution) {
366-
// Determine the sum of complementarity violations
367-
max_complementarity_violation = 0;
368-
sum_complementarity_violations = 0;
369-
double primal_residual = 0;
370-
for (HighsInt iVar = 0; iVar < lp.num_col_ + lp.num_row_; iVar++) {
371-
const bool is_col = iVar < lp.num_col_;
372-
const HighsInt iRow = iVar - lp.num_col_;
373-
const double primal =
374-
is_col ? solution.col_value[iVar] : solution.row_value[iRow];
375-
const double dual =
376-
is_col ? solution.col_dual[iVar] : solution.row_dual[iRow];
377-
const double lower = is_col ? lp.col_lower_[iVar] : lp.row_lower_[iRow];
378-
const double upper = is_col ? lp.col_upper_[iVar] : lp.row_upper_[iRow];
379-
if (lower <= -kHighsInf && upper >= kHighsInf) {
380-
// Free
381-
primal_residual = 1;
382-
} else {
383-
const double mid = (lower + upper) * 0.5;
384-
primal_residual = primal < mid ? std::fabs(lower - primal)
385-
: std::fabs(upper - primal);
386-
}
387-
const double dual_residual = std::fabs(dual);
388-
const double complementarity_violation = primal_residual * dual_residual;
389-
sum_complementarity_violations += complementarity_violation;
390-
max_complementarity_violation =
391-
std::max(complementarity_violation, max_complementarity_violation);
392-
}
393-
double check_max_complementarity_violation;
394-
double check_sum_complementarity_violations;
395-
const bool have_values = getComplementarityViolations(
396-
lp, solution, check_max_complementarity_violation,
397-
check_sum_complementarity_violations);
398-
assert(have_values);
399-
assert(check_max_complementarity_violation ==
400-
max_complementarity_violation);
401-
assert(check_sum_complementarity_violations ==
402-
sum_complementarity_violations);
403-
}
363+
// Determine the sum of complementarity violations
364+
if (have_dual_solution)
365+
getComplementarityViolations(lp, solution, max_complementarity_violation,
366+
sum_complementarity_violations);
404367

405368
if (get_residuals) {
406369
const double large_residual_error = 1e-12;
@@ -582,8 +545,7 @@ bool getComplementarityViolations(const HighsLp& lp,
582545
const HighsSolution& solution,
583546
double& max_complementarity_violation,
584547
double& sum_complementarity_violations) {
585-
max_complementarity_violation = kHighsIllegalComplementarityViolation;
586-
sum_complementarity_violations = kHighsIllegalComplementarityViolation;
548+
assert(solution.dual_valid);
587549
if (!solution.dual_valid) return false;
588550

589551
max_complementarity_violation = 0;
@@ -840,10 +802,7 @@ HighsStatus ipxSolutionToHighsSolution(
840802
options.log_options, HighsLogType::kInfo,
841803
"ipxSolutionToHighsSolution: Norm of delta row values is %10.4g\n",
842804
delta_norm);
843-
const bool force_dual_feasibility = false; // true;
844-
const bool minimal_truncation = true;
845-
if (model_status == HighsModelStatus::kOptimal &&
846-
(force_dual_feasibility || minimal_truncation)) {
805+
if (model_status == HighsModelStatus::kOptimal) {
847806
double primal_truncation_norm = 0;
848807
double dual_truncation_norm = 0;
849808
double col_primal_truncation_norm = 0;
@@ -914,7 +873,7 @@ HighsStatus ipxSolutionToHighsSolution(
914873
// Continue if no dual infeasibility
915874
if (dual_infeasibility <= dual_feasibility_tolerance) continue;
916875

917-
if (residual < dual_infeasibility && !force_dual_feasibility) {
876+
if (residual < dual_infeasibility) {
918877
/*
919878
// Residual is less than dual infeasibility, or not forcing
920879
// dual feasibility, so truncate value
@@ -1190,7 +1149,6 @@ HighsStatus ipxBasicSolutionToHighsBasicSolution(
11901149
double slack_value = ipx_col_value[ipx_slack];
11911150
double slack_dual = ipx_col_dual[ipx_slack];
11921151
double value = slack_value;
1193-
// @FlipRowDual -slack_dual became slack_dual
11941152
double dual = slack_dual;
11951153
if (ipx_row_status[ipx_row] == ipx_basic) {
11961154
// Row is basic
@@ -1238,7 +1196,6 @@ HighsStatus ipxBasicSolutionToHighsBasicSolution(
12381196
assert(ipx_row_status[ipx_row] ==
12391197
-1); // const ipx::Int ipx_nonbasic_row = -1;
12401198
double value = rhs[ipx_row] - ipx_row_value[ipx_row];
1241-
// @FlipRowDual -ipx_row_dual[ipx_row]; became ipx_row_dual[ipx_row];
12421199
double dual = ipx_row_dual[ipx_row];
12431200
if (constraint_type[ipx_row] == '>') {
12441201
// Row is at its lower bound

0 commit comments

Comments
 (0)