|
|
|
@ -42,86 +42,86 @@ using NUnit.Framework.Interfaces; |
|
|
|
|
|
|
|
namespace MathNet.Numerics.UnitTests.OptimizationTests |
|
|
|
{ |
|
|
|
[TestFixture] |
|
|
|
public class BfgsBMinimizerTests |
|
|
|
{ |
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Easy() |
|
|
|
{ |
|
|
|
[TestFixture] |
|
|
|
public class BfgsBMinimizerTests |
|
|
|
{ |
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Easy() |
|
|
|
{ |
|
|
|
var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var lowerBound = new DenseVector(new[]{ -5.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector(new[] { 1.2, 1.2 }); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var lowerBound = new DenseVector(new[]{ -5.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector(new[] { 1.2, 1.2 }); |
|
|
|
|
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
|
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
|
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Hard() |
|
|
|
{ |
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Hard() |
|
|
|
{ |
|
|
|
var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
|
|
|
|
var lowerBound = new DenseVector(new[]{ -5.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var lowerBound = new DenseVector(new[]{ -5.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
|
|
|
|
var initialGuess = new DenseVector (new[]{ -1.2, 1.0 }); |
|
|
|
var initialGuess = new DenseVector (new[]{ -1.2, 1.0 }); |
|
|
|
|
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
|
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
|
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Overton() |
|
|
|
{ |
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Overton() |
|
|
|
{ |
|
|
|
var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
|
|
|
|
var lowerBound = new DenseVector(new[]{ -5.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector (new[]{ -0.9, -0.5 }); |
|
|
|
var lowerBound = new DenseVector(new[]{ -5.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector (new[]{ -0.9, -0.5 }); |
|
|
|
|
|
|
|
var result = solver.FindMinimum (obj, lowerBound, upperBound, initialGuess); |
|
|
|
var result = solver.FindMinimum (obj, lowerBound, upperBound, initialGuess); |
|
|
|
|
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
|
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Easy_OneBoundary() |
|
|
|
{ |
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Easy_OneBoundary() |
|
|
|
{ |
|
|
|
var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var lowerBound = new DenseVector(new[]{ 1.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector(new[] { 1.2, 1.2 }); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var lowerBound = new DenseVector(new[]{ 1.0, -5.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector(new[] { 1.2, 1.2 }); |
|
|
|
|
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
|
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
|
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Easy_TwoBoundaries() |
|
|
|
{ |
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_Easy_TwoBoundaries() |
|
|
|
{ |
|
|
|
var obj = ObjectiveFunction.Gradient(RosenbrockFunction.Value, RosenbrockFunction.Gradient); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var lowerBound = new DenseVector(new[]{ 1.0, 1.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector(new[] { 1.2, 1.2 }); |
|
|
|
var solver = new BfgsBMinimizer (1e-5, 1e-5, 1e-5, maximumIterations: 1000); |
|
|
|
var lowerBound = new DenseVector(new[]{ 1.0, 1.0 }); |
|
|
|
var upperBound = new DenseVector(new[]{ 5.0, 5.0 }); |
|
|
|
var initialGuess = new DenseVector(new[] { 1.2, 1.2 }); |
|
|
|
|
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
var result = solver.FindMinimum(obj, lowerBound, upperBound, initialGuess); |
|
|
|
|
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[0] - RosenbrockFunction.Minimum[0]), Is.LessThan(1e-3)); |
|
|
|
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3)); |
|
|
|
} |
|
|
|
|
|
|
|
[Test] |
|
|
|
public void FindMinimum_Rosenbrock_MinimumGreateerOrEqualToLowerBoundary() |
|
|
|
@ -227,7 +227,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests |
|
|
|
.Concat(WoodFunction.TestCases) |
|
|
|
.Concat(BrownAndDennisFunction.TestCases) |
|
|
|
.Where(x => x.IsBounded) |
|
|
|
.Select(x => new TestCaseData(x) |
|
|
|
.Select<TestCase, ITestCaseData>(x => new TestCaseData(x) |
|
|
|
.SetName(_prefix + x.FullName) |
|
|
|
) |
|
|
|
.GetEnumerator(); |
|
|
|
@ -250,4 +250,3 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|