| 2714 | } |
| 2715 | |
| 2716 | void 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 |
no test coverage detected