Lines Matching refs:row

69 const Simplex::Unknown &SimplexBase::unknownFromRow(unsigned row) const {  in unknownFromRow()
70 assert(row < getNumRows() && "Invalid row"); in unknownFromRow()
71 return unknownFromIndex(rowUnknown[row]); in unknownFromRow()
84 Simplex::Unknown &SimplexBase::unknownFromRow(unsigned row) { in unknownFromRow() argument
85 assert(row < getNumRows() && "Invalid row"); in unknownFromRow()
86 return unknownFromIndex(rowUnknown[row]); in unknownFromRow()
262 LogicalResult LexSimplexBase::addCut(unsigned row) { in addCut() argument
263 int64_t d = tableau(row, 0); in addCut()
266 tableau(cutRow, 1) = -mod(-tableau(row, 1), d); // -c%d. in addCut()
269 tableau(cutRow, col) = mod(tableau(row, col), d); // b_i%d. in addCut()
280 unsigned row = u.pos; in maybeGetNonIntegralVarRow() local
281 if (tableau(row, 1) % tableau(row, 0) != 0) in maybeGetNonIntegralVarRow()
282 return row; in maybeGetNonIntegralVarRow()
329 SymbolicLexSimplex::getSymbolicSampleNumerator(unsigned row) const { in getSymbolicSampleNumerator()
333 sample.push_back(tableau(row, col)); in getSymbolicSampleNumerator()
334 sample.push_back(tableau(row, 1)); in getSymbolicSampleNumerator()
339 SymbolicLexSimplex::getSymbolicSampleIneq(unsigned row) const { in getSymbolicSampleIneq()
340 SmallVector<int64_t, 8> sample = getSymbolicSampleNumerator(row); in getSymbolicSampleIneq()
358 bool SymbolicLexSimplex::isSymbolicSampleIntegral(unsigned row) const { in isSymbolicSampleIntegral()
359 int64_t denom = tableau(row, 0); in isSymbolicSampleIntegral()
360 return tableau(row, 1) % denom == 0 && in isSymbolicSampleIntegral()
361 isRangeDivisibleBy(tableau.getRow(row).slice(3, nSymbol), denom); in isSymbolicSampleIntegral()
397 LogicalResult SymbolicLexSimplex::addSymbolicCut(unsigned row) { in addSymbolicCut() argument
398 int64_t d = tableau(row, 0); in addSymbolicCut()
399 if (isRangeDivisibleBy(tableau.getRow(row).slice(3, nSymbol), d)) { in addSymbolicCut()
403 return addCut(row); in addSymbolicCut()
411 divCoeffs.push_back(mod(-tableau(row, col), divDenom)); // (-a_i%d)s_i in addSymbolicCut()
412 divCoeffs.push_back(mod(-tableau(row, 1), divDenom)); // -c%d. in addSymbolicCut()
426 tableau(cutRow, 1) = -mod(-tableau(row, 1), d); // -(-c%d). in addSymbolicCut()
428 tableau(cutRow, col) = -mod(-tableau(row, col), d); // -(-a_i%d)s_i. in addSymbolicCut()
432 tableau(cutRow, col) = mod(tableau(row, col), d); // (b_i%d)y_i. in addSymbolicCut()
474 for (unsigned row = 0, e = getNumRows(); row < e; ++row) in maybeGetAlwaysViolatedRow() local
475 if (tableau(row, 2) < 0) in maybeGetAlwaysViolatedRow()
476 return row; in maybeGetAlwaysViolatedRow()
478 for (unsigned row = 0, e = getNumRows(); row < e; ++row) { in maybeGetAlwaysViolatedRow() local
479 if (tableau(row, 2) > 0) in maybeGetAlwaysViolatedRow()
481 if (domainSimplex.isSeparateInequality(getSymbolicSampleIneq(row))) { in maybeGetAlwaysViolatedRow()
483 return row; in maybeGetAlwaysViolatedRow()
503 while (Optional<unsigned> row = maybeGetAlwaysViolatedRow()) in doNonBranchingPivots() local
504 if (moveRowUnknownToColumn(*row).failed()) in doNonBranchingPivots()
602 if (Optional<unsigned> row = maybeGetNonIntegralVarRow()) { in computeSymbolicIntegerLexMin() local
603 if (addSymbolicCut(*row).failed()) { in computeSymbolicIntegerLexMin()
657 bool LexSimplex::rowIsViolated(unsigned row) const { in rowIsViolated()
658 if (tableau(row, 2) < 0) in rowIsViolated()
660 if (tableau(row, 2) == 0 && tableau(row, 1) < 0) in rowIsViolated()
666 for (unsigned row = 0, e = getNumRows(); row < e; ++row) in maybeGetViolatedRow() local
667 if (rowIsViolated(row)) in maybeGetViolatedRow()
668 return row; in maybeGetViolatedRow()
746 LogicalResult LexSimplexBase::moveRowUnknownToColumn(unsigned row) { in moveRowUnknownToColumn() argument
749 if (tableau(row, col) <= 0) in moveRowUnknownToColumn()
752 !maybeColumn ? col : getLexMinPivotColumn(row, *maybeColumn, col); in moveRowUnknownToColumn()
758 pivot(row, *maybeColumn); in moveRowUnknownToColumn()
762 unsigned LexSimplexBase::getLexMinPivotColumn(unsigned row, unsigned colA, in getLexMinPivotColumn() argument
808 auto getSampleChangeCoeffForVar = [this, row](unsigned col, in getLexMinPivotColumn()
810 int64_t a = tableau(row, col); in getLexMinPivotColumn()
821 if (u.pos == row) in getLexMinPivotColumn()
855 Optional<SimplexBase::Pivot> Simplex::findPivot(int row, in findPivot() argument
859 int64_t elem = tableau(row, j); in findPivot()
874 tableau(row, *col) < 0 ? flippedDirection(direction) : direction; in findPivot()
875 Optional<unsigned> maybePivotRow = findPivotRow(row, newDirection, *col); in findPivot()
876 return Pivot{maybePivotRow.value_or(row), *col}; in findPivot()
883 void SimplexBase::swapRowWithCol(unsigned row, unsigned col) { in swapRowWithCol() argument
884 std::swap(rowUnknown[row], colUnknown[col]); in swapRowWithCol()
886 Unknown &uRow = unknownFromRow(row); in swapRowWithCol()
890 uRow.pos = row; in swapRowWithCol()
893 void SimplexBase::pivot(Pivot pair) { pivot(pair.row, pair.column); } in pivot()
941 for (unsigned row = 0, numRows = getNumRows(); row < numRows; ++row) { in pivot() local
942 if (row == pivotRow) in pivot()
944 if (tableau(row, pivotCol) == 0) // Nothing to do. in pivot()
946 tableau(row, 0) *= tableau(pivotRow, 0); in pivot()
951 tableau(row, col) = tableau(row, col) * tableau(pivotRow, 0) + in pivot()
952 tableau(row, pivotCol) * tableau(pivotRow, col); in pivot()
954 tableau(row, pivotCol) *= tableau(pivotRow, pivotCol); in pivot()
955 tableau.normalizeRow(row); in pivot()
1009 for (unsigned row = nRedundant, e = getNumRows(); row < e; ++row) { in findPivotRow() local
1010 if (skipRow && row == *skipRow) in findPivotRow()
1012 int64_t elem = tableau(row, col); in findPivotRow()
1015 if (!unknownFromRow(row).restricted) in findPivotRow()
1019 int64_t constTerm = tableau(row, 1); in findPivotRow()
1022 retRow = row; in findPivotRow()
1029 if ((diff == 0 && rowUnknown[row] < rowUnknown[*retRow]) || in findPivotRow()
1031 retRow = row; in findPivotRow()
1143 for (unsigned row = nRedundant, e = getNumRows(); row < e; ++row) in findAnyPivotRow() local
1144 if (tableau(row, col) != 0) in findAnyPivotRow()
1145 return row; in findAnyPivotRow()
1169 Optional<unsigned> row = findAnyPivotRow(column); in undoLastConstraint() local
1170 assert(row && "Pivot should always exist for a constraint!"); in undoLastConstraint()
1171 pivot(*row, column); in undoLastConstraint()
1188 Optional<unsigned> row = findAnyPivotRow(column); in undoLastConstraint() local
1189 assert(row && "Pivot should always exist for a constraint!"); in undoLastConstraint()
1190 pivot(*row, column); in undoLastConstraint()
1312 unsigned row) { in computeRowOptimum() argument
1314 while (Optional<Pivot> maybePivot = findPivot(row, direction)) { in computeRowOptimum()
1317 if (maybePivot->row == row) in computeRowOptimum()
1325 return Fraction(tableau(row, 1), tableau(row, 0)); in computeRowOptimum()
1337 unsigned row = con[conIndex].pos; in computeOptimum() local
1338 return computeRowOptimum(direction, row); in computeOptimum()
1355 unsigned row = u.pos; in computeOptimum() local
1356 MaybeOptimum<Fraction> optimum = computeRowOptimum(direction, row); in computeOptimum()
1422 unsigned row = u.pos; in detectRedundant() local
1423 MaybeOptimum<Fraction> minimum = computeRowOptimum(Direction::Down, row); in detectRedundant()
1499 auto appendRowFromA = [&](unsigned row) { in makeProduct() argument
1502 result.tableau(resultRow, col) = a.tableau(row, col); in makeProduct()
1503 result.rowUnknown.push_back(a.rowUnknown[row]); in makeProduct()
1510 auto appendRowFromB = [&](unsigned row) { in makeProduct() argument
1512 result.tableau(resultRow, 0) = b.tableau(row, 0); in makeProduct()
1513 result.tableau(resultRow, 1) = b.tableau(row, 1); in makeProduct()
1517 result.tableau(resultRow, offset + col) = b.tableau(row, col); in makeProduct()
1518 result.rowUnknown.push_back(indexFromBIndex(b.rowUnknown[row])); in makeProduct()
1524 for (unsigned row = 0; row < a.nRedundant; ++row) in makeProduct() local
1525 appendRowFromA(row); in makeProduct()
1526 for (unsigned row = 0; row < b.nRedundant; ++row) in makeProduct() local
1527 appendRowFromB(row); in makeProduct()
1528 for (unsigned row = a.nRedundant, e = a.getNumRows(); row < e; ++row) in makeProduct() local
1529 appendRowFromA(row); in makeProduct()
1530 for (unsigned row = b.nRedundant, e = b.getNumRows(); row < e; ++row) in makeProduct() local
1531 appendRowFromB(row); in makeProduct()
1657 unsigned row = simplex.con[conIndex].pos; in computeWidthAndDuals() local
1659 simplex.computeRowOptimum(Simplex::Direction::Up, row); in computeWidthAndDuals()
1661 dualDenom = simplex.tableau(row, 0); in computeWidthAndDuals()
1692 dual.push_back(-simplex.tableau(row, simplex.con[i].pos)); in computeWidthAndDuals()
1694 dual.push_back(simplex.tableau(row, simplex.con[i + 1].pos)); in computeWidthAndDuals()
2095 for (unsigned row = 0, e = getNumRows(); row < e; ++row) { in print() local
2096 if (row > 0) in print()
2098 os << "r" << row << ": " << rowUnknown[row]; in print()
2105 for (unsigned row = 0, numRows = getNumRows(); row < numRows; ++row) { in print() local
2107 os << tableau(row, col) << '\t'; in print()