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