Example #1
0
        public void DeleteExtraVariblsFromAB(int numFromDelete)
        {
            int indexToDelete = ILFreeEl.FindIndex(x => x > numFromDelete);

            if (indexToDelete < 0)
            {
                return;
            }
            //Теперь необходимо сместить все индесы на еденицу начиная с того, который удаляем.
            //Чтобы в дальнейшем не возникло проблем с размерностью, будем использовать переопределение этих самых матриц
            //Тогда нам нужно заменить лишь Matrix & ObjFunction
            Fraction[]   NewObjFunction = new Fraction[ColumCount - 1];//Понижаем размерность
            Fraction[][] NewMatrix      = new Fraction[RowCount][];
            for (int i = 0; i < RowCount; i++)
            {
                NewMatrix[i] = new Fraction[ColumCount - 1];
            }

            int offset = 0;

            for (int g = 0; g < ColumCount; g++)
            {
                if (g == indexToDelete)
                {
                    offset = 1;
                    continue;
                }
                for (int i = 0; i < RowCount; i++)
                {
                    NewMatrix[i][g - offset] = Matrix[i][g];
                }
                NewObjFunction[g - offset] = ObjFunction[g];
            }

            ColumCount--;
            ILFreeEl.RemoveAt(indexToDelete);
            Matrix      = NewMatrix;
            ObjFunction = NewObjFunction;
        }
Example #2
0
        /*
         * Заполняет симплекс таблицу из таблицы гаусса
         * Можно считать это корректной инициилазцией объекта и началом работы с самой симплекс таблицей
         */
        public void FillTable(GaussMatrix gaussM, List <Fraction> initObjFunc, bool fFindMax)
        {
            ILBasisEl = new List <int>(gaussM.IndexListBasisElements);

            for (int i = 0; i < ColumCount + RowCount; i++)
            {
                if (!ILBasisEl.Contains(i))
                {
                    ILFreeEl.Add(i);
                }
            }

            for (int i = 0; i < RowCount; i++)
            {
                for (int g = 0; g < ILFreeEl.Count; g++)
                {
                    Matrix[i][g] = gaussM.Matrix[i][ILFreeEl[g]];
                }
            }

            RightPart = gaussM.RightPart;
            CalculateObjectiveFunction(initObjFunc, fFindMax);
            CalculateObjectiveFunctionValue(initObjFunc, fFindMax);
        }