public void ComputeCostsCoefficientsTest() { var field = new DoubleField(); var revisedSimplexAlg = new RevisedSimplexAlgorithm <double>( Comparer <double> .Default, field); var target = new PrivateObject(revisedSimplexAlg); var etaVector = new double[4]; // Fábricas úteis para o teste dos quatro cenários. var arrayMatrixFactory = new ArrayMathMatrixFactory <double>(); var squareArrayMatrixFactory = new ArraySquareMatrixFactory <double>(); var sparseMatrixFactory = new SparseDictionaryMathMatrixFactory <double>(); var squareSparseMatrixFactory = new SparseDictionarySquareMatrixFactory <double>(); this.TestComputeCostsCoefficients(target, squareArrayMatrixFactory, 0, arrayMatrixFactory, 0, etaVector); this.TestComputeCostsCoefficients(target, squareArrayMatrixFactory, 0, sparseMatrixFactory, 0, etaVector); this.TestComputeCostsCoefficients(target, squareSparseMatrixFactory, 0, arrayMatrixFactory, 0, etaVector); this.TestComputeCostsCoefficients(target, squareSparseMatrixFactory, 0, sparseMatrixFactory, 0, etaVector); }
public void RunTest_OnlyInequalitiesDouble() { var inputConstraintsMatrixText = "[[1,0,3],[0,2,2]]"; var inputConstraintsVectorText = "[4,12,18]"; var inputObjectiveFuncText = "[-3,-5]"; var inverseMatrixText = "[[1,0,0],[0,1,0],[0,0,1]]"; var cost = 0.0; var nonBasicVariables = new[] { 0, 1 }; var basicVariables = new[] { 2, 3, 4 }; // Leitura da matriz das retrições. var doubleElementsParser = new DoubleParser <string>(); var inputConstraintsMatrix = TestsHelper.ReadMatrix <double>( 3, 2, inputConstraintsMatrixText, (i, j) => new ArrayMathMatrix <double>(i, j), doubleElementsParser, true); // Leitura da matriz inversa. var inverseMatrix = TestsHelper.ReadMatrix <double>( 3, 3, inverseMatrixText, (i, j) => new ArraySquareMathMatrix <double>(i), doubleElementsParser, true) as ISquareMathMatrix <double>; // Leitura do vector de restrições. var vectorFactory = new ArrayVectorFactory <double>(); var inputConstraintsVector = TestsHelper.ReadVector <double>( 3, inputConstraintsVectorText, vectorFactory, doubleElementsParser, true); // Leitura da função objectivo. var inputObjectiveFunction = TestsHelper.ReadVector <double>( 2, inputObjectiveFuncText, vectorFactory, doubleElementsParser, true); // Objecto de entrada para o algoritmo do simplex. var simplexInput = new RevisedSimplexInput <double, double>( basicVariables, nonBasicVariables, inputObjectiveFunction, cost, inputConstraintsMatrix, inputConstraintsVector, inverseMatrix); // Executa o algoritmo do simplex. var doubleField = new DoubleField(); var target = new RevisedSimplexAlgorithm <double>(Comparer <double> .Default, doubleField); var actual = target.Run(simplexInput); // Verifica o custo Assert.AreEqual(36, actual.Cost); // Verifica a solução Assert.AreEqual(2, actual.Solution[0]); Assert.AreEqual(6, actual.Solution[1]); }