public Noise(int seed) { //Initialize the main noise function using a custom seed _random = new System.Random(seed); perlin = new PerlinAlgorithm(_random); simplex = new SimplexAlgorithm(_random); }
public void RunTest_OneEquality() { var inputConstraintsMatrixText = "[[1,0,3],[0,2,2]]"; var inputConstraintsVectorText = "[4,12,18]"; var cost = new SimplexMaximumNumberField <double>(0, -18); 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 do vector de restrições. var vectorFactory = new ArrayVectorFactory <double>(); var inputConstraintsVector = TestsHelper.ReadVector <double>( 3, inputConstraintsVectorText, vectorFactory, doubleElementsParser, true); // Introdução da função objectivo. var inputObjectiveFunction = new ArrayMathVector <SimplexMaximumNumberField <double> >(2); inputObjectiveFunction[0] = new SimplexMaximumNumberField <double>( -3, -3); inputObjectiveFunction[1] = new SimplexMaximumNumberField <double>( -5, -2); // Objecto de entrada para o algoritmo do simplex. var simplexInput = new SimplexInput <double, SimplexMaximumNumberField <double> >( basicVariables, nonBasicVariables, inputObjectiveFunction, cost, inputConstraintsMatrix, inputConstraintsVector); var doubleField = new DoubleField(); var target = new SimplexAlgorithm <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]); }
public void RunSimplexTest_NoFeasibleSolution() { var inputConstraintsMatrixText = "[[0.3,0.5,0.6],[0.1,0.5,0.4],[0,0,-1]]"; var inputConstraintsVectorText = "[1.8,6,6]"; var cost = new SimplexMaximumNumberField <double>(0, -12); var nonBasicVariables = new[] { 0, 1, 2 }; var basicVariables = new[] { 3, 4, 5 }; // Leitura da matriz das retrições. var doubleElementsParser = new DoubleParser <string>(); var inputConstraintsMatrix = TestsHelper.ReadMatrix <double>( 3, 3, inputConstraintsMatrixText, (i, j) => new ArrayMathMatrix <double>(i, j), doubleElementsParser, true); // Leitura do vector de restrições. var vectorFactory = new ArrayVectorFactory <double>(); var inputConstraintsVector = TestsHelper.ReadVector <double>( 3, inputConstraintsVectorText, vectorFactory, doubleElementsParser, true); // Introdução da função objectivo. var inputObjectiveFunction = new ArrayMathVector <SimplexMaximumNumberField <double> >(3); inputObjectiveFunction[0] = new SimplexMaximumNumberField <double>( 0.4, -1.1); inputObjectiveFunction[1] = new SimplexMaximumNumberField <double>( 0.5, -0.9); inputObjectiveFunction[2] = new SimplexMaximumNumberField <double>( 0, 1); // Objecto de entrada para o algoritmo do simplex. var simplexInput = new SimplexInput <double, SimplexMaximumNumberField <double> >( basicVariables, nonBasicVariables, inputObjectiveFunction, cost, inputConstraintsMatrix, inputConstraintsVector); var doubleField = new DoubleField(); var target = new SimplexAlgorithm <double>(Comparer <double> .Default, doubleField); var actual = target.Run(simplexInput); // O problema tem uma solução cujo custo é inifito. Assert.IsFalse(actual.HasSolution); }
public void MaximizeTest() { // f(x) = 3x1+x2 -> max var funcCoefficients = new double[] { 3, 1 }; // 1x1 - 2x2 <= 1 // -2x1 + 1x2 <= 2 // 2x1 + 1x2 <= 6 var bounds = new double[, ] { { 1, -2, 1 }, { -2, 1, 2 }, { 2, 1, 6 } }; var result = new SimplexAlgorithm().Maximize(funcCoefficients, bounds); var solution = result.GetSolution().ToArray(); const double x1 = 2.6; const double x2 = 0.8; Assert.IsTrue(solution[0] == x1 && solution[1] == x2, "Incorrect answer"); }