private bool HavePositiveCellsWithoutPositiveElements(SimplexTable table)
 {
     for (var j = 0; j < table.Variables.Count; j++)
     {
         if (table.GetRating(table.Variables.ElementAt(j)) <= 0) continue;
         var havePositive = false;
         for (var i = 0; i < table.RowsCount; i++)
         {
             if (table.GetMatrixElement(i, j) < 0) continue;
             havePositive = true;
             break;
         }
         if (!havePositive) return true;
     }
     return false;
 }
 /// <summary>
 /// Returns index of solving cell(or -1 if table has no positive rating)
 /// </summary>
 /// <param name="table">Table with calculated ratings</param>
 /// <param name="solvingRowIndex">Index of solving row</param>
 private int GetSolvingCellIndex(SimplexTable table, int solvingRowIndex)
 {
     if (solvingRowIndex < 0) return -1;
     var minRatioIndex = -1;
     var minRatio = new MaxCoefficient();
     for (var i = 0; i < table.Variables.Count; i++)
     {
         var matrixElement = table.GetMatrixElement(solvingRowIndex, i);
         if (matrixElement >= 0) continue;
         var rating = table.Ratings[i];
         var currRatio = new MaxCoefficient(rating);
         currRatio.Multiply(1 / matrixElement);
         if (currRatio.CompareTo(minRatio) != -1 && minRatioIndex != -1) continue;
         minRatioIndex = i;
         minRatio = currRatio;
     }
     return minRatioIndex;
 }
 /// <summary>
 /// Returns index of solving row(or -1 if solving row has no positive elements or solvingCellIndex == -1)
 /// </summary>
 private int GetSolvingRowIndex(SimplexTable table, int solvingCellIndex)
 {
     if (solvingCellIndex < 0) return -1;
     var minRatioIndex = -1;
     var minRatio = new Fraction();
     for (var i = 0; i < table.RowsCount; i++)
     {
         var matrixElement = table.GetMatrixElement(i, solvingCellIndex);
         if (matrixElement <= 0) continue;
         var freeCoefficient = table.GetFreeCoefficient(i);
         var currRatio = freeCoefficient / matrixElement;
         if (currRatio >= minRatio && minRatioIndex != -1) continue;
         minRatioIndex = i;
         minRatio = currRatio;
     }
     return minRatioIndex;
 }
 /// <summary>
 /// Gets result of solving of normalized problem
 /// </summary>
 public LppResult GetNormalizedProblemResult(SimplexTable table)
 {
     for (var i = 0; i < table.Variables.Count; i++)
     {
         if (table.GetRating(table.Variables.ElementAt(i)) <= 0) continue;
         var allNegative = true;
         for (var j = 0; j < table.RowsCount; j++)
         {
             if (table.GetMatrixElement(j, i) >= 0)
                 allNegative = false;
         }
         if (allNegative)
             return new LppResult(null, null);
     }
     return GetResult(table, VariablesWithMaxCoefficient);
 }