@@ -20,7 +20,7 @@ void testFeasibilityRelaxation(
2020 const double require_feasibility_objective_function_value);
2121
2222void checkIisLp (HighsLp& lp, const HighsIis& iis, const HighsLp& iis_lp);
23-
23+
2424TEST_CASE (" lp-incompatible-bounds" , " [iis]" ) {
2525 // LP has row0 and col2 with inconsistent bounds.
2626 //
@@ -51,17 +51,11 @@ TEST_CASE("lp-incompatible-bounds", "[iis]") {
5151 HighsIis iis;
5252 REQUIRE (highs.getIis (iis) == HighsStatus::kOk );
5353 checkIisLp (lp, iis, iis_lp);
54- REQUIRE (highs.passModel (iis_lp) == HighsStatus::kOk );
55- highs.writeModel (" " );
56- REQUIRE (highs.run () == HighsStatus::kOk );
57- REQUIRE (highs.getModelStatus () == HighsModelStatus::kInfeasible );
58-
59- /*
6054 // Perform full IIS
6155 REQUIRE (highs.run () == HighsStatus::kOk );
6256 REQUIRE (highs.getModelStatus () == HighsModelStatus::kInfeasible );
6357 highs.setOptionValue (" iis_strategy" , kIisStrategyFromLpRowPriority );
64- HighsIis iis;
58+
6559 REQUIRE (highs.getIis (iis) == HighsStatus::kOk );
6660 REQUIRE (iis.col_index_ .size () == 0 );
6761 REQUIRE (iis.row_index_ .size () == 1 );
@@ -73,7 +67,7 @@ TEST_CASE("lp-incompatible-bounds", "[iis]") {
7367 REQUIRE (iis.row_index_ .size () == 0 );
7468 REQUIRE (iis.col_index_ [0 ] == 2 );
7569 REQUIRE (iis.col_bound_ [0 ] == kIisBoundStatusBoxed );
76- */
70+
7771 highs.resetGlobalScheduler (true );
7872}
7973
@@ -502,24 +496,30 @@ void checkIisLp(HighsLp& lp, const HighsIis& iis, const HighsLp& iis_lp) {
502496 for (HighsInt iisRow = 0 ; iisRow < iis_num_row; iisRow++) {
503497 HighsInt iRow = iis.row_index_ [iisRow];
504498 iis_row[iRow] = iisRow;
505- REQUIRE (iis_lp.row_lower_ [iisRow] == lp.row_lower_ [iRow]);
506- REQUIRE (iis_lp.row_upper_ [iisRow] == lp.row_upper_ [iRow]);
499+ HighsInt row_bound = iis.row_bound_ [iisRow];
500+ if (row_bound == kIisBoundStatusLower || row_bound == kIisBoundStatusBoxed )
501+ REQUIRE (iis_lp.row_lower_ [iisRow] == lp.row_lower_ [iRow]);
502+ if (row_bound == kIisBoundStatusUpper || row_bound == kIisBoundStatusBoxed )
503+ REQUIRE (iis_lp.row_upper_ [iisRow] == lp.row_upper_ [iRow]);
507504 }
508-
505+
509506 // Work through the LP columns and matrix, checking the costs,
510- // bounds and matrix index/value
507+ // bounds and matrix index/value
511508 for (HighsInt iisCol = 0 ; iisCol < iis_num_col; iisCol++) {
512509 HighsInt iCol = iis.col_index_ [iisCol];
513510 REQUIRE (iis_lp.col_cost_ [iisCol] == lp.col_cost_ [iCol]);
514- REQUIRE (iis_lp.col_lower_ [iisCol] == lp.col_lower_ [iCol]);
515- REQUIRE (iis_lp.col_upper_ [iisCol] == lp.col_upper_ [iCol]);
511+ HighsInt col_bound = iis.col_bound_ [iisCol];
512+ if (col_bound == kIisBoundStatusLower || col_bound == kIisBoundStatusBoxed )
513+ REQUIRE (iis_lp.col_lower_ [iisCol] == lp.col_lower_ [iCol]);
514+ if (col_bound == kIisBoundStatusUpper || col_bound == kIisBoundStatusBoxed )
515+ REQUIRE (iis_lp.col_upper_ [iisCol] == lp.col_upper_ [iCol]);
516516 for (HighsInt iEl = lp.a_matrix_ .start_ [iCol];
517- iEl < lp.a_matrix_ .start_ [iCol+ 1 ]; iEl++) {
517+ iEl < lp.a_matrix_ .start_ [iCol + 1 ]; iEl++) {
518518 HighsInt iRow = lp.a_matrix_ .index_ [iEl];
519519 HighsInt iisRow = iis_row[iRow];
520520 if (iisRow >= 0 ) {
521- REQUIRE (iis_lp.a_matrix_ .index_ [iisCol] == iisRow);
522- REQUIRE (iis_lp.a_matrix_ .value_ [iisCol] == lp.a_matrix_ .value_ [iEl]);
521+ REQUIRE (iis_lp.a_matrix_ .index_ [iisCol] == iisRow);
522+ REQUIRE (iis_lp.a_matrix_ .value_ [iisCol] == lp.a_matrix_ .value_ [iEl]);
523523 }
524524 }
525525 }
@@ -532,18 +532,17 @@ void checkIisLp(HighsLp& lp, const HighsIis& iis, const HighsLp& iis_lp) {
532532 index.assign (lp.num_row_ , -1 );
533533 value.assign (lp.num_row_ , 0 );
534534 for (HighsInt iEl = lp.a_matrix_ .start_ [iCol];
535- iEl < lp.a_matrix_ .start_ [iCol+ 1 ]; iEl++) {
535+ iEl < lp.a_matrix_ .start_ [iCol + 1 ]; iEl++) {
536536 HighsInt iRow = lp.a_matrix_ .index_ [iEl];
537537 index[iRow] = iis_row[iRow];
538538 value[iRow] = lp.a_matrix_ .value_ [iEl];
539539 }
540540 for (HighsInt iEl = iis_lp.a_matrix_ .start_ [iCol];
541- iEl < iis_lp.a_matrix_ .start_ [iCol+ 1 ]; iisCol++) {
541+ iEl < iis_lp.a_matrix_ .start_ [iCol + 1 ]; iisCol++) {
542542 HighsInt iisRow = iis_lp.a_matrix_ .index_ [iEl];
543- HighsInt iRow = iis.row_index_ [iisRow];
543+ HighsInt iRow = iis.row_index_ [iisRow];
544544 REQUIRE (index[iRow] == iisRow);
545545 REQUIRE (value[iRow] == iis_lp.a_matrix_ .value_ [iEl]);
546546 }
547547 }
548548}
549-
0 commit comments