From 5ea0943e7f1d0f2ed3b7d0093d563cd5aaa087cf Mon Sep 17 00:00:00 2001 From: Scott Stephens Date: Sat, 4 Jan 2014 16:35:37 -0600 Subject: [PATCH] Optimization: Add tests involving larger numbers output from the objective --- .../OptimizationTests/TestBfgsMinimizer.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/UnitTests/OptimizationTests/TestBfgsMinimizer.cs b/src/UnitTests/OptimizationTests/TestBfgsMinimizer.cs index dfb8cced..281a5b7a 100644 --- a/src/UnitTests/OptimizationTests/TestBfgsMinimizer.cs +++ b/src/UnitTests/OptimizationTests/TestBfgsMinimizer.cs @@ -40,5 +40,38 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests Assert.That(Math.Abs(result.MinimizingPoint[0] - 1.0), Is.LessThan(1e-3)); Assert.That(Math.Abs(result.MinimizingPoint[1] - 1.0), Is.LessThan(1e-3)); } + + [Test] + public void FindMinimum_BigRosenbrock_Easy() + { + var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); + var solver = new BfgsMinimizer(1e-10, 1e-5, 1000); + var result = solver.FindMinimum(obj, new DenseVector(new[] { 1.2*100.0, 1.2*100.0 })); + + Assert.That(Math.Abs(result.MinimizingPoint[0] - 100.0), Is.LessThan(1e-3)); + Assert.That(Math.Abs(result.MinimizingPoint[1] - 100.0), Is.LessThan(1e-3)); + } + + [Test] + public void FindMinimum_BigRosenbrock_Hard() + { + var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); + var solver = new BfgsMinimizer(1e-5, 1e-5, 1000); + var result = solver.FindMinimum(obj, new DenseVector(new[] { -1.2*100.0, 1.0*100.0 })); + + Assert.That(Math.Abs(result.MinimizingPoint[0] - 1.0), Is.LessThan(1e-3)); + Assert.That(Math.Abs(result.MinimizingPoint[1] - 1.0), Is.LessThan(1e-3)); + } + + [Test] + public void FindMinimum_BigRosenbrock_Overton() + { + var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); + var solver = new BfgsMinimizer(1e-5, 1e-5, 1000); + var result = solver.FindMinimum(obj, new DenseVector(new[] { -0.9*100.0, -0.5*100.0 })); + + Assert.That(Math.Abs(result.MinimizingPoint[0] - 100.0), Is.LessThan(1e-3)); + Assert.That(Math.Abs(result.MinimizingPoint[1] - 100.0), Is.LessThan(1e-3)); + } } }