MCPcopy Create free account
hub / github.com/ERGO-Code/HiGHS / initialiseNonbasicValueAndMove

Method initialiseNonbasicValueAndMove

highs/simplex/HEkk.cpp:2716–2772  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2714}
2715
2716void HEkk::initialiseNonbasicValueAndMove() {
2717 // Initialise workValue and nonbasicMove from nonbasicFlag and
2718 // bounds, except for boxed variables when nonbasicMove is used to
2719 // set workValue=workLower/workUpper
2720 const HighsInt num_tot = lp_.num_col_ + lp_.num_row_;
2721 for (HighsInt iVar = 0; iVar < num_tot; iVar++) {
2722 if (!basis_.nonbasicFlag_[iVar]) {
2723 // Basic variable
2724 basis_.nonbasicMove_[iVar] = kNonbasicMoveZe;
2725 continue;
2726 }
2727 // Nonbasic variable
2728 const double lower = info_.workLower_[iVar];
2729 const double upper = info_.workUpper_[iVar];
2730 const int8_t original_move = basis_.nonbasicMove_[iVar];
2731 double value;
2732 int8_t move = kIllegalMoveValue;
2733 if (lower == upper) {
2734 // Fixed
2735 value = lower;
2736 move = kNonbasicMoveZe;
2737 } else if (!highs_isInfinity(-lower)) {
2738 // Finite lower bound so boxed or lower
2739 if (!highs_isInfinity(upper)) {
2740 // Finite upper bound so boxed
2741 if (original_move == kNonbasicMoveUp) {
2742 // Set at lower
2743 value = lower;
2744 move = kNonbasicMoveUp;
2745 } else if (original_move == kNonbasicMoveDn) {
2746 // Set at upper
2747 value = upper;
2748 move = kNonbasicMoveDn;
2749 } else {
2750 // Invalid nonbasicMove: correct and set value at lower
2751 value = lower;
2752 move = kNonbasicMoveUp;
2753 }
2754 } else {
2755 // Lower
2756 value = lower;
2757 move = kNonbasicMoveUp;
2758 }
2759 } else if (!highs_isInfinity(upper)) {
2760 // Upper
2761 value = upper;
2762 move = kNonbasicMoveDn;
2763 } else {
2764 // FREE
2765 value = 0;
2766 move = kNonbasicMoveZe;
2767 }
2768 assert(move != kIllegalMoveValue);
2769 basis_.nonbasicMove_[iVar] = move;
2770 info_.workValue_[iVar] = value;
2771 }
2772}
2773

Callers 4

solveMethod · 0.80
solvePhase1Method · 0.80
solveMethod · 0.80
cleanupMethod · 0.80

Calls 1

highs_isInfinityFunction · 0.85

Tested by

no test coverage detected