| 933 | } |
| 934 | |
| 935 | void HEkkDual::majorRollback() { |
| 936 | for (HighsInt iFn = multi_nFinish - 1; iFn >= 0; iFn--) { |
| 937 | MFinish* finish = &multi_finish[iFn]; |
| 938 | |
| 939 | // 1. Roll back pivot |
| 940 | ekk_instance_.basis_.nonbasicMove_[finish->variable_in] = finish->move_in; |
| 941 | ekk_instance_.basis_.nonbasicFlag_[finish->variable_in] = 1; |
| 942 | ekk_instance_.basis_.nonbasicMove_[finish->variable_out] = 0; |
| 943 | ekk_instance_.basis_.nonbasicFlag_[finish->variable_out] = 0; |
| 944 | ekk_instance_.basis_.basicIndex_[finish->row_out] = finish->variable_out; |
| 945 | |
| 946 | // 2. Roll back matrix |
| 947 | ekk_instance_.updateMatrix(finish->variable_out, finish->variable_in); |
| 948 | |
| 949 | // 3. Roll back flips |
| 950 | for (HighsInt var : finish->flipList) { |
| 951 | ekk_instance_.flipBound(var); |
| 952 | } |
| 953 | |
| 954 | // 4. Roll back cost |
| 955 | ekk_instance_.info_.workShift_[finish->variable_in] = 0; |
| 956 | ekk_instance_.info_.workShift_[finish->variable_out] = finish->shiftOut; |
| 957 | |
| 958 | // 5. The iteration count |
| 959 | ekk_instance_.iteration_count_--; |
| 960 | } |
| 961 | } |
| 962 | |
| 963 | bool HEkkDual::checkNonUnitWeightError(std::string message) const { |
| 964 | bool error_found = false; |
nothing calls this directly
no test coverage detected