示例#1
0
        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);
        }
示例#2
0
        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();
        }