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

Method createFreemove

highs/simplex/HEkkDualRow.cpp:580–598  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

578}
579
580void HEkkDualRow::createFreemove(HVector* row_ep) {
581 // TODO: Check with Qi what this is doing and why it's expensive
582 if (!freeList.empty()) {
583 double Ta = ekk_instance_.info_.update_count < 10 ? 1e-9
584 : ekk_instance_.info_.update_count < 20 ? 3e-8
585 : 1e-6;
586 HighsInt move_out = workDelta < 0 ? -1 : 1;
587 for (const HighsInt& iVar : freeList) {
588 assert(iVar < ekk_instance_.lp_.num_col_ + ekk_instance_.lp_.num_row_);
589 double alpha = ekk_instance_.lp_.a_matrix_.computeDot(*row_ep, iVar);
590 if (fabs(alpha) > Ta) {
591 if (alpha * move_out > 0)
592 ekk_instance_.basis_.nonbasicMove_[iVar] = 1;
593 else
594 ekk_instance_.basis_.nonbasicMove_[iVar] = -1;
595 }
596 }
597 }
598}
599void HEkkDualRow::deleteFreemove() {
600 if (!freeList.empty()) {
601 for (const HighsInt& iVar : freeList) {

Callers 3

chooseColumnMethod · 0.80
chooseColumnSliceMethod · 0.80

Calls 2

emptyMethod · 0.45
computeDotMethod · 0.45

Tested by

no test coverage detected