public Fraction SolveWithArtificialBasic()
        {
            // Получаем начальную декомпозицию для искусственного базиса
            var dec = _augmentedConstraintList.DecompositionForArtificialBasic();

            // Вычисляем целевую функцию по декомпозиции для искусственного базиса
            var coeffs = new Fraction[dec.FreeVariables.Length + 1];
            for (var i = 0; i < coeffs.Length; i++)
            {
                Fraction sum = 0;
                for (var j = 0; j < dec.BasicVariables.Length; j++)
                    sum += dec.Coefficients[j, i];
                coeffs[i] = -sum;
            }
            coeffs[coeffs.Length - 1] *= -1; // ! Потом будет поменян знак, т.к. в симлекс таблице мы записываем обратное значение
            var objFunc = new ObjectiveFunction(coeffs);

            // Приводим составленую симплекс таблицу к нужному виду
            var artBasic = new SimplexTable(dec, objFunc, _loggerForArtBasic, _userChoiceForArtBasic, _isDecimalFractions)
                .ToArtificialBasic();

            _objectiveFunction.Substitution(artBasic);
            return new SimplexTable(artBasic, _objectiveFunction, _logger, _userChoice, _isDecimalFractions)
                .Calculate();
        }
Exemple #2
0
        public void SimplexTable_Solve_Successful(
            Decomposition decomposition, ObjectiveFunction objectiveFunction, Fraction expected)
        {
            var dut = new SimplexTable(decomposition, objectiveFunction, _logger).Calculate();

            Assert.AreEqual(expected, dut);
        }
        public void Test1()
        {
            var dec = new Decomposition
            {
                BasicVariables = new[] {5, 6, 7},
                FreeVariables = new[] {0, 1, 2, 3, 4},
                Coefficients = new Fraction[,] {{-2, 4, 1, -1, 0, 3}, {4, -3, -1, 1, 1, 6}, {1, 4, 1, 0, 1, 15}}
            };
            var objFunc = new ObjectiveFunction(new Fraction[] {-3, -5, -1, 0, -2, 24});

            var dut = new SimplexTable(dec, objFunc, new Logger());

            var artBasic = dut.ToArtificialBasic();
        }