public void CalculateFirstGomory(Fraction[,] limits, Fraction[] freeMembers, Fraction[] functionFx, int integerValue) { int mainRowIndex = 0; bool isEnd = false; int counter = 0; var myTuple = simplex.CalculateSimlexMethod(ref functionFx, ref limits, ref freeMembers); Fraction[,] newLimits = new Fraction[limits.GetLength(0), limits.GetLength(1)]; Fraction[] newFreeMembers = new Fraction[freeMembers.Length]; Fraction[] newMarks = new Fraction[myTuple.Item1.Length]; int[] newInBasis = new int[freeMembers.Length]; do { if (counter == 0) { mainRowIndex = GetIndexOfMainRow(freeMembers, myTuple.Item3, limits, integerValue); var resize = GetNewCut(limits, freeMembers, myTuple.Item1, mainRowIndex); newLimits = new Fraction[newLimits.GetLength(0) + 1, newLimits.GetLength(1) + 1]; newFreeMembers = new Fraction[newFreeMembers.Length + 1]; newMarks = new Fraction[newMarks.Length + 1]; newLimits = resize.Item1; newFreeMembers = resize.Item2; newMarks = resize.Item3; } else { mainRowIndex = GetIndexOfMainRow(newFreeMembers, newInBasis, newLimits, integerValue); var resize = GetNewCut(newLimits, newFreeMembers, newMarks, mainRowIndex); newLimits = new Fraction[newLimits.GetLength(0) + 1, newLimits.GetLength(1) + 1]; newFreeMembers = new Fraction[newFreeMembers.Length + 1]; newMarks = new Fraction[newMarks.Length + 1]; newLimits = resize.Item1; newFreeMembers = resize.Item2; newMarks = resize.Item3; } var binari = biSimplex.CalculateBinarySimplexMethod(ref functionFx, newLimits, newFreeMembers); newLimits = binari.Item4; newFreeMembers = binari.Item5; newMarks = binari.Item1; newInBasis = binari.Item3; isEnd = CheckExitCondition(newFreeMembers, integerValue); counter++; } while (!isEnd); }
static void Main(string[] args) { //Fraction[,] limits = //{ // { (Fraction)(-1), (Fraction)1, (Fraction)1, (Fraction)0, (Fraction)0}, // {(Fraction)(-1), (Fraction)3, (Fraction)0, (Fraction)1, (Fraction)0}, // {(Fraction)5, (Fraction)1, (Fraction)0, (Fraction)0, (Fraction)1} //}; //Fraction[] freeMembers = { (Fraction)2, (Fraction)10, (Fraction)30 }; //Fraction[] functionFx = { (Fraction)10, (Fraction)(-15), (Fraction)0, (Fraction)0, (Fraction)0 }; // Fraction[,] limits = //{ // { (Fraction)(-1), (Fraction)3, (Fraction)1, (Fraction)0}, // {(Fraction)7, (Fraction)1, (Fraction)0, (Fraction)1} // }; // Fraction[] freeMembers = { (Fraction)6, (Fraction)35 }; // Fraction[] functionFx = { (Fraction)(-7), (Fraction)(-9), (Fraction)0, (Fraction)0 }; // FirstGomory gomory = new FirstGomory(); // gomory.CalculateFirstGomory(limits, freeMembers, functionFx, 2); //SimplexMethod sm = new SimplexMethod(); // sm.CalculateSimlexMethod(functionFx, limits, freeMembers); // Fraction[,] limits = //{ // { (Fraction)1, (Fraction)(-1), (Fraction)1, (Fraction)0,(Fraction)0}, // {(Fraction)(-2), (Fraction)(-3), (Fraction)0, (Fraction)1, (Fraction)0}, // {(Fraction)(-4), (Fraction)2, (Fraction)0, (Fraction)0, (Fraction)1} // }; // Fraction[] freeMembers = { (Fraction)2, (Fraction)(-5), (Fraction)(-3) }; // Fraction[] functionFx = { (Fraction)2, (Fraction)3, (Fraction)0, (Fraction)0, (Fraction)0 }; Fraction[,] limits = { { (Fraction)(-2), (Fraction)(-1), (Fraction)1, (Fraction)0 }, { (Fraction)(-1), (Fraction)(-3), (Fraction)0, (Fraction)1 } }; Fraction[] freeMembers = { (Fraction)(-8), (Fraction)(-6) }; Fraction[] functionFx = { (Fraction)1, (Fraction)1, (Fraction)0, (Fraction)0 }; BinarySimplexMethod bs = new BinarySimplexMethod(); bs.CalculateBinarySimplexMethod(ref functionFx, limits, freeMembers); //Fraction first = new Fraction(-7, 11); //Fraction result = first.GetFloatPart(); Console.ReadKey(); }