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(); }
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(); }