public void FindMinimum_TestFunction1WithConstraints_AnalyticResult() { /* Constraints: * x_0 + x_1 = 3, * x_0 >= 0, * x_1 >= 0, * x_0 + x_2 >= 2 */ var optimizer = new GoldfarbIdanaQuadraticProgram(); var boxConstraint = optimizer.Constraint.Create(MultiDimRegion.Interval.Create(2, new[] { 0.0, 0.0 }, new[] { Double.NaN, Double.NaN })); var equalityConstraint = optimizer.Constraint.Create(new MultiDimRegion.LinearEquality(new DenseMatrix(2, 1, new[] { 1.0, 1.0 }), new[] { 3.0 })); var inequalityConstraint = optimizer.Constraint.Create(new MultiDimRegion.LinearInequality(new DenseMatrix(2, 1, new[] { 1.0, 1.0 }), new[] { 2.0 })); var algorithm = optimizer.Create(boxConstraint, equalityConstraint, inequalityConstraint); var A = new DenseMatrix(2, 2, new[] { 4.0, -2.0, -2.0, 4 - 0 }); // = (4 & -2 \\ -2 & 4) var b = new[] { 6.0, 0.0 }; algorithm.Function = optimizer.Function.Create(A, b); var actualArgMin = new double[2]; double actualMinimum; var state = algorithm.FindMinimum(actualArgMin, out actualMinimum); var expectedArgMin = new[] { 1.0, 2.0 }; var expectedMinimum = 12.0; Assert.That(actualMinimum, Is.EqualTo(expectedMinimum).Within(1E-7), String.Format("State: {0}; actual Minimum: {1}; expected Minimum: {2}; actual argMin: [{3}; {4}]; expected argMin: [{5}; {6}].", state, actualMinimum, expectedMinimum, actualArgMin[0], actualArgMin[1], expectedArgMin[0], expectedArgMin[1])); Assert.That(actualArgMin, Is.EqualTo(expectedArgMin).AsCollection.Within(1E-7), String.Format("State: {0}; actual Minimum: {1}; expected Minimum: {2}; actual argMin: [{3}; {4}]; expected argMin: [{5}; {6}].", state, actualMinimum, expectedMinimum, actualArgMin[0], actualArgMin[1], expectedArgMin[0], expectedArgMin[1])); }
public void FindMinimum_TestFunction3WithConstraints_AnalyticResult() { /* minimize: * f(x) = - 8 * x_0 - 16 * x_1 + x_0^2 + 4 * x_1^2 * * subject to x_0 + x_1 <= 5, x_0 <? 3, x_0 >= 0, x_1 >= 0 */ var optimizer = new GoldfarbIdanaQuadraticProgram(); var boxConstraint = optimizer.Constraint.Create(MultiDimRegion.Interval.Create(2, new[] { 0.0, 0.0 }, new[] { 3.0, Double.NaN })); var inequalityConstraint = optimizer.Constraint.Create(new MultiDimRegion.LinearInequality(new DenseMatrix(2, 1, new[] { -1.0, -1.0 }), new[] { -5.0 })); var algorithm = optimizer.Create(boxConstraint, inequalityConstraint); var A = new DenseMatrix(2, 2, new[] { 2.0, 0.0, 0.0, 8.0 }); var b = new[] { -8.0, -16.0 }; algorithm.Function = optimizer.Function.Create(A, b); var actualArgMin = new double[2]; double actualMinimum; var state = algorithm.FindMinimum(actualArgMin, out actualMinimum); var expectedArgMin = new[] { 3.0, 2.0 }; var expectedMinimum = -31.0; Assert.That(actualMinimum, Is.EqualTo(expectedMinimum).Within(1E-7), String.Format("State: {0}; actual Minimum: {1}; expected Minimum: {2}; actual argMin: [{3}; {4}]; expected argMin: [{5}; {6}].", state, actualMinimum, expectedMinimum, actualArgMin[0], actualArgMin[1], expectedArgMin[0], expectedArgMin[1])); Assert.That(actualArgMin, Is.EqualTo(expectedArgMin).AsCollection.Within(1E-7), String.Format("State: {0}; actual Minimum: {1}; expected Minimum: {2}; actual argMin: [{3}; {4}]; expected argMin: [{5}; {6}].", state, actualMinimum, expectedMinimum, actualArgMin[0], actualArgMin[1], expectedArgMin[0], expectedArgMin[1])); }
public void FindMinimum_TestFunction1NoConstraints_AnalyticResult() { var optimizer = new GoldfarbIdanaQuadraticProgram(); var algorithm = optimizer.Create(2); var A = new DenseMatrix(2, 2, new[] { 4.0, -2.0, -2.0, 4 - 0 }); // = (4 & -2 \\ -2 & 4) var b = new[] { 6.0, 0.0 }; algorithm.Function = optimizer.Function.Create(A, b); var actualArgMin = new double[2]; double actualMinimum; var state = algorithm.FindMinimum(actualArgMin, out actualMinimum); var expectedArgMin = new[] { -2.0, -1.0 }; var expectedMinimum = -6.0; Assert.That(actualMinimum, Is.EqualTo(expectedMinimum).Within(1E-7), String.Format("State: {0}; actual Minimum: {1}; expected Minimum: {2}; actual argMin: [{3}; {4}]; expected argMin: [{5}; {6}].", state, actualMinimum, expectedMinimum, actualArgMin[0], actualArgMin[1], expectedArgMin[0], expectedArgMin[1])); Assert.That(actualArgMin, Is.EqualTo(expectedArgMin).AsCollection.Within(1E-7), String.Format("State: {0}; actual Minimum: {1}; expected Minimum: {2}; actual argMin: [{3}; {4}]; expected argMin: [{5}; {6}].", state, actualMinimum, expectedMinimum, actualArgMin[0], actualArgMin[1], expectedArgMin[0], expectedArgMin[1])); }