Browse Source

Optimization: fix portable builds: covariance and type inferrence

pull/497/head
Christoph Ruegg 9 years ago
parent
commit
7d61334282
  1. 119
      src/UnitTests/OptimizationTests/BfgsBMinimizerTests.cs
  2. 50
      src/UnitTests/OptimizationTests/BfgsMinimizerTests.cs
  3. 2
      src/UnitTests/OptimizationTests/ConjugateGradientMinimizerTests.cs
  4. 2
      src/UnitTests/OptimizationTests/NelderMeadSimplexTests.cs
  5. 4
      src/UnitTests/OptimizationTests/NewtonMinimizerTests.cs

119
src/UnitTests/OptimizationTests/BfgsBMinimizerTests.cs

@ -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
}
}
}

50
src/UnitTests/OptimizationTests/BfgsMinimizerTests.cs

@ -47,38 +47,38 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
Assert.That(Math.Abs(result.MinimizingPoint[1] - RosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
[Test]
public void FindMinimum_BigRosenbrock_Easy()
{
[Test]
public void FindMinimum_BigRosenbrock_Easy()
{
var obj = ObjectiveFunction.Gradient(BigRosenbrockFunction.Value, BigRosenbrockFunction.Gradient);
var solver = new BfgsMinimizer(1e-10, 1e-5, 1e-5, 1000);
var result = solver.FindMinimum(obj, new DenseVector(new[] { 1.2*100.0, 1.2*100.0 }));
var solver = new BfgsMinimizer(1e-10, 1e-5, 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] - BigRosenbrockFunction.Minimum[0]), Is.LessThan(1e-3));
Assert.That(Math.Abs(result.MinimizingPoint[1] - BigRosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
Assert.That(Math.Abs(result.MinimizingPoint[0] - BigRosenbrockFunction.Minimum[0]), Is.LessThan(1e-3));
Assert.That(Math.Abs(result.MinimizingPoint[1] - BigRosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
[Test]
public void FindMinimum_BigRosenbrock_Hard()
{
[Test]
public void FindMinimum_BigRosenbrock_Hard()
{
var obj = ObjectiveFunction.Gradient(BigRosenbrockFunction.Value, BigRosenbrockFunction.Gradient);
var solver = new BfgsMinimizer(1e-5, 1e-5, 1e-5, 1000);
var result = solver.FindMinimum(obj, new DenseVector(new[] { -1.2*100.0, 1.0*100.0 }));
var solver = new BfgsMinimizer(1e-5, 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] - BigRosenbrockFunction.Minimum[0]), Is.LessThan(1e-3));
Assert.That(Math.Abs(result.MinimizingPoint[1] - BigRosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
Assert.That(Math.Abs(result.MinimizingPoint[0] - BigRosenbrockFunction.Minimum[0]), Is.LessThan(1e-3));
Assert.That(Math.Abs(result.MinimizingPoint[1] - BigRosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
[Test]
public void FindMinimum_BigRosenbrock_Overton()
{
[Test]
public void FindMinimum_BigRosenbrock_Overton()
{
var obj = ObjectiveFunction.Gradient(BigRosenbrockFunction.Value, BigRosenbrockFunction.Gradient);
var solver = new BfgsMinimizer(1e-5, 1e-5, 1e-5, 1000);
var result = solver.FindMinimum(obj, new DenseVector(new[] { -0.9*100.0, -0.5*100.0 }));
var solver = new BfgsMinimizer(1e-5, 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] - BigRosenbrockFunction.Minimum[0]), Is.LessThan(1e-3));
Assert.That(Math.Abs(result.MinimizingPoint[1] - BigRosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
Assert.That(Math.Abs(result.MinimizingPoint[0] - BigRosenbrockFunction.Minimum[0]), Is.LessThan(1e-3));
Assert.That(Math.Abs(result.MinimizingPoint[1] - BigRosenbrockFunction.Minimum[1]), Is.LessThan(1e-3));
}
private class MghTestCaseEnumerator : IEnumerable<ITestCaseData>
{
@ -93,7 +93,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
.Concat(WoodFunction.TestCases)
.Concat(BrownAndDennisFunction.TestCases)
.Where(x => x.IsUnbounded)
.Select(x => new TestCaseData(x)
.Select<TestCase, ITestCaseData>(x => new TestCaseData(x)
.SetName(x.FullName)
)
.GetEnumerator();

2
src/UnitTests/OptimizationTests/ConjugateGradientMinimizerTests.cs

@ -62,7 +62,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
.Concat(WoodFunction.TestCases)
.Concat(BrownAndDennisFunction.TestCases)
.Where(x => x.IsUnbounded)
.Select(x => new TestCaseData(x)
.Select<TestCase, ITestCaseData>(x => new TestCaseData(x)
.SetName(x.FullName)
.IgnoreIf(in_ignore_list(x.FullName),"Algo error, not implementation error.")
)

2
src/UnitTests/OptimizationTests/NelderMeadSimplexTests.cs

@ -94,7 +94,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
.Concat(WoodFunction.TestCases)
.Concat(BrownAndDennisFunction.TestCases)
.Where(x => x.IsUnbounded)
.Select(x => new TestCaseData(x)
.Select<TestCase, ITestCaseData>(x => new TestCaseData(x)
.SetName(x.FullName)
.IgnoreIf(in_ignore_list(x.FullName), "Algo error, not implementation error")
)

4
src/UnitTests/OptimizationTests/NewtonMinimizerTests.cs

@ -69,6 +69,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
Assert.That(Math.Abs(result.MinimizingPoint[1] - 1.0), Is.LessThan(1e-3));
}
#if !NET35
[Test]
public void FindMinimum_Rosenbrock_Hard()
{
@ -79,6 +80,7 @@ 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));
}
#endif
[Test]
public void FindMinimum_Rosenbrock_Overton()
@ -149,7 +151,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests
.Concat(WoodFunction.TestCases)
.Concat(BrownAndDennisFunction.TestCases)
.Where(x => x.IsUnbounded)
.Select(x => new TestCaseData(x)
.Select<TestCase,ITestCaseData>(x => new TestCaseData(x)
.SetName(x.FullName)
.IgnoreIf(in_ignore_list(x.FullName),"Algo error, not implementation error")
)

Loading…
Cancel
Save