diff --git a/src/Numerics/Numerics.csproj b/src/Numerics/Numerics.csproj index 370d2a0d..b273b872 100644 --- a/src/Numerics/Numerics.csproj +++ b/src/Numerics/Numerics.csproj @@ -116,10 +116,11 @@ + - + - + diff --git a/src/Numerics/Optimization/BaseEvaluation.cs b/src/Numerics/Optimization/BaseObjectiveFunction.cs similarity index 90% rename from src/Numerics/Optimization/BaseEvaluation.cs rename to src/Numerics/Optimization/BaseObjectiveFunction.cs index b2ac67b3..b41d2dbc 100644 --- a/src/Numerics/Optimization/BaseEvaluation.cs +++ b/src/Numerics/Optimization/BaseObjectiveFunction.cs @@ -2,7 +2,7 @@ namespace MathNet.Numerics.Optimization { - public abstract class BaseEvaluation : IEvaluation + public abstract class BaseObjectiveFunction : IObjectiveFunction { public EvaluationStatus Status { get; protected set; } @@ -14,7 +14,7 @@ namespace MathNet.Numerics.Optimization public bool GradientSupported { get; private set; } public bool HessianSupported { get; private set; } - protected BaseEvaluation(bool gradientSupported, bool hessianSupported) + protected BaseObjectiveFunction(bool gradientSupported, bool hessianSupported) { Status = EvaluationStatus.None; GradientSupported = gradientSupported; @@ -74,6 +74,6 @@ namespace MathNet.Numerics.Optimization protected abstract void SetValue(); protected abstract void SetGradient(); protected abstract void SetHessian(); - public abstract IEvaluation CreateNew(); + public abstract IObjectiveFunction CreateNew(); } } diff --git a/src/Numerics/Optimization/Exceptions.cs b/src/Numerics/Optimization/Exceptions.cs index 741a9815..13560bde 100644 --- a/src/Numerics/Optimization/Exceptions.cs +++ b/src/Numerics/Optimization/Exceptions.cs @@ -19,18 +19,18 @@ namespace MathNet.Numerics.Optimization public class EvaluationException : OptimizationException { - public IEvaluation Evaluation { get; private set; } + public IObjectiveFunction ObjectiveFunction { get; private set; } - public EvaluationException(string message, IEvaluation eval) + public EvaluationException(string message, IObjectiveFunction eval) : base(message) { - this.Evaluation = eval; + this.ObjectiveFunction = eval; } - public EvaluationException(string message, IEvaluation eval, Exception inner_exception) + public EvaluationException(string message, IObjectiveFunction eval, Exception inner_exception) : base(message, inner_exception) { - this.Evaluation = eval; + this.ObjectiveFunction = eval; } //public EvaluationException(string message, IEvaluation1D eval) diff --git a/src/Numerics/Optimization/IEvaluation.cs b/src/Numerics/Optimization/IObjectiveFunction.cs similarity index 85% rename from src/Numerics/Optimization/IEvaluation.cs rename to src/Numerics/Optimization/IObjectiveFunction.cs index 678e970b..65c58230 100644 --- a/src/Numerics/Optimization/IEvaluation.cs +++ b/src/Numerics/Optimization/IObjectiveFunction.cs @@ -6,10 +6,10 @@ namespace MathNet.Numerics.Optimization [Flags] public enum EvaluationStatus { None = 0, Value = 1, Gradient = 2, Hessian = 4 } - public interface IEvaluation + public interface IObjectiveFunction { Vector Point { get; set; } - IEvaluation CreateNew(); + IObjectiveFunction CreateNew(); // Used by algorithm bool GradientSupported { get; } diff --git a/src/Numerics/Optimization/IUnconstrainedMinimizer.cs b/src/Numerics/Optimization/IUnconstrainedMinimizer.cs index ad2ba208..e565edb2 100644 --- a/src/Numerics/Optimization/IUnconstrainedMinimizer.cs +++ b/src/Numerics/Optimization/IUnconstrainedMinimizer.cs @@ -4,6 +4,6 @@ namespace MathNet.Numerics.Optimization { public interface IUnconstrainedMinimizer { - MinimizationOutput FindMinimum(IEvaluation objective, Vector initialGuess); + MinimizationOutput FindMinimum(IObjectiveFunction objective, Vector initialGuess); } } diff --git a/src/Numerics/Optimization/Implementation/LineSearchOutput.cs b/src/Numerics/Optimization/Implementation/LineSearchOutput.cs index b20a0f20..85469013 100644 --- a/src/Numerics/Optimization/Implementation/LineSearchOutput.cs +++ b/src/Numerics/Optimization/Implementation/LineSearchOutput.cs @@ -4,7 +4,7 @@ { public double FinalStep { get; private set; } - public LineSearchOutput(IEvaluation functionInfo, int iterations, double finalStep, ExitCondition reasonForExit) + public LineSearchOutput(IObjectiveFunction functionInfo, int iterations, double finalStep, ExitCondition reasonForExit) : base(functionInfo, iterations, reasonForExit) { FinalStep = finalStep; diff --git a/src/Numerics/Optimization/Implementation/NullEvaluation.cs b/src/Numerics/Optimization/Implementation/NullObjectiveFunction.cs similarity index 77% rename from src/Numerics/Optimization/Implementation/NullEvaluation.cs rename to src/Numerics/Optimization/Implementation/NullObjectiveFunction.cs index 32caece2..159da526 100644 --- a/src/Numerics/Optimization/Implementation/NullEvaluation.cs +++ b/src/Numerics/Optimization/Implementation/NullObjectiveFunction.cs @@ -3,9 +3,9 @@ using MathNet.Numerics.LinearAlgebra; namespace MathNet.Numerics.Optimization.Implementation { - public class NullEvaluation : BaseEvaluation + public class NullObjectiveFunction : BaseObjectiveFunction { - public NullEvaluation(Vector point) + public NullObjectiveFunction(Vector point) : base(false, false) { Point = point; @@ -25,7 +25,7 @@ namespace MathNet.Numerics.Optimization.Implementation throw new NotImplementedException(); } - public override IEvaluation CreateNew() + public override IObjectiveFunction CreateNew() { throw new NotImplementedException(); } diff --git a/src/Numerics/Optimization/Implementation/ObjectiveChecker.cs b/src/Numerics/Optimization/Implementation/ObjectiveChecker.cs index 961366e0..2cd5db1f 100644 --- a/src/Numerics/Optimization/Implementation/ObjectiveChecker.cs +++ b/src/Numerics/Optimization/Implementation/ObjectiveChecker.cs @@ -3,20 +3,20 @@ using MathNet.Numerics.LinearAlgebra; namespace MathNet.Numerics.Optimization.Implementation { - public class CheckedEvaluation : IEvaluation + public class CheckedObjectiveFunction : IObjectiveFunction { private bool _valueChecked; private bool _gradientChecked; private bool _hessianChecked; - public IEvaluation InnerEvaluation { get; private set; } - public Action ValueChecker { get; private set; } - public Action GradientChecker { get; private set; } - public Action HessianChecker { get; private set; } + public IObjectiveFunction InnerObjectiveFunction { get; private set; } + public Action ValueChecker { get; private set; } + public Action GradientChecker { get; private set; } + public Action HessianChecker { get; private set; } - public CheckedEvaluation(IEvaluation objective, Action valueChecker, Action gradientChecker, Action hessianChecker) + public CheckedObjectiveFunction(IObjectiveFunction objective, Action valueChecker, Action gradientChecker, Action hessianChecker) { - InnerEvaluation = objective; + InnerObjectiveFunction = objective; ValueChecker = valueChecker; GradientChecker = gradientChecker; HessianChecker = hessianChecker; @@ -24,8 +24,8 @@ namespace MathNet.Numerics.Optimization.Implementation public Vector Point { - get { return InnerEvaluation.Point; } - set { InnerEvaluation.Point = value; } + get { return InnerObjectiveFunction.Point; } + set { InnerObjectiveFunction.Point = value; } } public double Value @@ -38,16 +38,16 @@ namespace MathNet.Numerics.Optimization.Implementation double tmp; try { - tmp = InnerEvaluation.Value; + tmp = InnerObjectiveFunction.Value; } catch (Exception e) { - throw new EvaluationException("Objective function evaluation failed.", InnerEvaluation, e); + throw new EvaluationException("Objective function evaluation failed.", InnerObjectiveFunction, e); } - ValueChecker(InnerEvaluation); + ValueChecker(InnerObjectiveFunction); _valueChecked = true; } - return InnerEvaluation.Value; + return InnerObjectiveFunction.Value; } } @@ -61,16 +61,16 @@ namespace MathNet.Numerics.Optimization.Implementation Vector tmp; try { - tmp = InnerEvaluation.Gradient; + tmp = InnerObjectiveFunction.Gradient; } catch (Exception e) { - throw new EvaluationException("Objective gradient evaluation failed.", InnerEvaluation, e); + throw new EvaluationException("Objective gradient evaluation failed.", InnerObjectiveFunction, e); } - GradientChecker(InnerEvaluation); + GradientChecker(InnerObjectiveFunction); _gradientChecked = true; } - return InnerEvaluation.Gradient; + return InnerObjectiveFunction.Gradient; } } @@ -84,32 +84,32 @@ namespace MathNet.Numerics.Optimization.Implementation Matrix tmp; try { - tmp = InnerEvaluation.Hessian; + tmp = InnerObjectiveFunction.Hessian; } catch (Exception e) { - throw new EvaluationException("Objective hessian evaluation failed.", InnerEvaluation, e); + throw new EvaluationException("Objective hessian evaluation failed.", InnerObjectiveFunction, e); } - HessianChecker(InnerEvaluation); + HessianChecker(InnerObjectiveFunction); _hessianChecked = true; } - return InnerEvaluation.Hessian; + return InnerObjectiveFunction.Hessian; } } - public IEvaluation CreateNew() + public IObjectiveFunction CreateNew() { - return new CheckedEvaluation(InnerEvaluation, ValueChecker, GradientChecker, HessianChecker); + return new CheckedObjectiveFunction(InnerObjectiveFunction, ValueChecker, GradientChecker, HessianChecker); } public bool GradientSupported { - get { return InnerEvaluation.GradientSupported; } + get { return InnerObjectiveFunction.GradientSupported; } } public bool HessianSupported { - get { return InnerEvaluation.HessianSupported; } + get { return InnerObjectiveFunction.HessianSupported; } } } } diff --git a/src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs b/src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs index c5ace961..6003ba20 100644 --- a/src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs +++ b/src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs @@ -19,11 +19,11 @@ namespace MathNet.Numerics.Optimization.Implementation } // Implemented following http://www.math.washington.edu/~burke/crs/408/lectures/L9-weak-Wolfe.pdf - public LineSearchOutput FindConformingStep(IEvaluation objective, IEvaluation startingPoint, Vector searchDirection, double initialStep) + public LineSearchOutput FindConformingStep(IObjectiveFunction objective, IObjectiveFunction startingPoint, Vector searchDirection, double initialStep) { - if (!(objective is CheckedEvaluation)) + if (!(objective is CheckedObjectiveFunction)) { - objective = new CheckedEvaluation(objective, ValidateValue, ValidateGradient, null); + objective = new CheckedObjectiveFunction(objective, ValidateValue, ValidateGradient, null); } double lowerBound = 0.0; @@ -36,7 +36,7 @@ namespace MathNet.Numerics.Optimization.Implementation double initialDd = searchDirection * initialGradient; int ii; - IEvaluation candidateEval = objective.CreateNew(); + IObjectiveFunction candidateEval = objective.CreateNew(); MinimizationOutput.ExitCondition reasonForExit = MinimizationOutput.ExitCondition.None; for (ii = 0; ii < _maximumIterations; ++ii) { @@ -89,7 +89,7 @@ namespace MathNet.Numerics.Optimization.Implementation return new LineSearchOutput(candidateEval, ii, step, reasonForExit); } - bool Conforms(IEvaluation startingPoint, Vector searchDirection, double step, IEvaluation endingPoint) + bool Conforms(IObjectiveFunction startingPoint, Vector searchDirection, double step, IObjectiveFunction endingPoint) { bool sufficientDecrease = endingPoint.Value <= startingPoint.Value + _c1 * step * (startingPoint.Gradient * searchDirection); bool notTooSteep = endingPoint.Gradient * searchDirection >= _c2 * startingPoint.Gradient * searchDirection; @@ -97,7 +97,7 @@ namespace MathNet.Numerics.Optimization.Implementation return step > 0 && sufficientDecrease && notTooSteep; } - void ValidateValue(IEvaluation eval) + void ValidateValue(IObjectiveFunction eval) { if (!IsFinite(eval.Value)) { @@ -105,7 +105,7 @@ namespace MathNet.Numerics.Optimization.Implementation } } - void ValidateGradient(IEvaluation eval) + void ValidateGradient(IObjectiveFunction eval) { foreach (double x in eval.Gradient) { diff --git a/src/Numerics/Optimization/MinimizationOutput.cs b/src/Numerics/Optimization/MinimizationOutput.cs index 3d4d3827..d9b4bd75 100644 --- a/src/Numerics/Optimization/MinimizationOutput.cs +++ b/src/Numerics/Optimization/MinimizationOutput.cs @@ -7,11 +7,11 @@ namespace MathNet.Numerics.Optimization public enum ExitCondition { None, RelativeGradient, LackOfProgress, AbsoluteGradient, WeakWolfeCriteria, BoundTolerance, StrongWolfeCriteria, LackOfFunctionImprovement } public Vector MinimizingPoint { get { return FunctionInfoAtMinimum.Point; } } - public IEvaluation FunctionInfoAtMinimum { get; private set; } + public IObjectiveFunction FunctionInfoAtMinimum { get; private set; } public int Iterations { get; private set; } public ExitCondition ReasonForExit { get; private set; } - public MinimizationOutput(IEvaluation functionInfo, int iterations, ExitCondition reasonForExit) + public MinimizationOutput(IObjectiveFunction functionInfo, int iterations, ExitCondition reasonForExit) { FunctionInfoAtMinimum = functionInfo; Iterations = iterations; diff --git a/src/Numerics/Optimization/MinimizationWithLineSearchOutput.cs b/src/Numerics/Optimization/MinimizationWithLineSearchOutput.cs index e7f2aadf..2d3df000 100644 --- a/src/Numerics/Optimization/MinimizationWithLineSearchOutput.cs +++ b/src/Numerics/Optimization/MinimizationWithLineSearchOutput.cs @@ -5,7 +5,7 @@ public int TotalLineSearchIterations { get; private set; } public int IterationsWithNonTrivialLineSearch { get; private set; } - public MinimizationWithLineSearchOutput(IEvaluation functionInfo, int iterations, ExitCondition reasonForExit, int totalLineSearchIterations, int iterationsWithNonTrivialLineSearch) + public MinimizationWithLineSearchOutput(IObjectiveFunction functionInfo, int iterations, ExitCondition reasonForExit, int totalLineSearchIterations, int iterationsWithNonTrivialLineSearch) : base(functionInfo, iterations, reasonForExit) { TotalLineSearchIterations = totalLineSearchIterations; diff --git a/src/Numerics/Optimization/NewtonMinimizer.cs b/src/Numerics/Optimization/NewtonMinimizer.cs index 8d399122..2654c477 100644 --- a/src/Numerics/Optimization/NewtonMinimizer.cs +++ b/src/Numerics/Optimization/NewtonMinimizer.cs @@ -18,7 +18,7 @@ namespace MathNet.Numerics.Optimization UseLineSearch = useLineSearch; } - public MinimizationOutput FindMinimum(IEvaluation objective, Vector initialGuess) + public MinimizationOutput FindMinimum(IObjectiveFunction objective, Vector initialGuess) { if (!objective.GradientSupported) throw new IncompatibleObjectiveException("Gradient not supported in objective function, but required for Newton minimization."); @@ -26,10 +26,10 @@ namespace MathNet.Numerics.Optimization if (!objective.HessianSupported) throw new IncompatibleObjectiveException("Hessian not supported in objective function, but required for Newton minimization."); - if (!(objective is CheckedEvaluation)) - objective = new CheckedEvaluation(objective, ValidateObjective, ValidateGradient, ValidateHessian); + if (!(objective is CheckedObjectiveFunction)) + objective = new CheckedObjectiveFunction(objective, ValidateObjective, ValidateGradient, ValidateHessian); - IEvaluation initialEval = objective.CreateNew(); + IObjectiveFunction initialEval = objective.CreateNew(); initialEval.Point = initialGuess; // Check that we're not already done @@ -40,7 +40,7 @@ namespace MathNet.Numerics.Optimization var lineSearcher = new WeakWolfeLineSearch(1e-4, 0.9, 1e-4, maxIterations: 1000); // Declare state variables - IEvaluation candidatePoint = initialEval; + IObjectiveFunction candidatePoint = initialEval; // Subsequent steps int iterations = 0; @@ -92,7 +92,7 @@ namespace MathNet.Numerics.Optimization return gradient.Norm(2.0) < GradientTolerance; } - private void ValidateGradient(IEvaluation eval) + private void ValidateGradient(IObjectiveFunction eval) { foreach (var x in eval.Gradient) { @@ -101,13 +101,13 @@ namespace MathNet.Numerics.Optimization } } - private void ValidateObjective(IEvaluation eval) + private void ValidateObjective(IObjectiveFunction eval) { if (Double.IsNaN(eval.Value) || Double.IsInfinity(eval.Value)) throw new EvaluationException("Non-finite objective function returned.", eval); } - private void ValidateHessian(IEvaluation eval) + private void ValidateHessian(IObjectiveFunction eval) { for (int ii = 0; ii < eval.Hessian.RowCount; ++ii) { diff --git a/src/UnitTests/OptimizationTests/RosenbrockFunction.cs b/src/UnitTests/OptimizationTests/RosenbrockFunction.cs index e27b6147..76b0b277 100644 --- a/src/UnitTests/OptimizationTests/RosenbrockFunction.cs +++ b/src/UnitTests/OptimizationTests/RosenbrockFunction.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using MathNet.Numerics.LinearAlgebra; +using MathNet.Numerics.LinearAlgebra.Double; namespace MathNet.Numerics.UnitTests.OptimizationTests { @@ -16,7 +13,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests public static Vector Gradient(Vector input) { - Vector output = new MathNet.Numerics.LinearAlgebra.Double.DenseVector(2); + Vector output = new DenseVector(2); output[0] = -2 * (1 - input[0]) + 200 * (input[1] - input[0] * input[0]) * (-2 * input[0]); output[1] = 2 * 100 * (input[1] - input[0] * input[0]); return output; @@ -24,8 +21,7 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests public static Matrix Hessian(Vector input) { - - Matrix output = new MathNet.Numerics.LinearAlgebra.Double.DenseMatrix(2, 2); + Matrix output = new DenseMatrix(2, 2); output[0, 0] = 2 - 400 * input[1] + 1200 * input[0] * input[0]; output[1, 1] = 200; output[0, 1] = -400 * input[0]; @@ -50,6 +46,5 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests { return 100.0 * RosenbrockFunction.Hessian(input / 100.0); } - } } diff --git a/src/UnitTests/OptimizationTests/TestNewtonMinimizer.cs b/src/UnitTests/OptimizationTests/TestNewtonMinimizer.cs index de23f090..d7f910d7 100644 --- a/src/UnitTests/OptimizationTests/TestNewtonMinimizer.cs +++ b/src/UnitTests/OptimizationTests/TestNewtonMinimizer.cs @@ -1,37 +1,33 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using NUnit.Framework; +using MathNet.Numerics.LinearAlgebra.Double; using MathNet.Numerics.Optimization; +using NUnit.Framework; namespace MathNet.Numerics.UnitTests.OptimizationTests { - public class RosenbrockEvaluation : BaseEvaluation + public class RosenbrockObjectiveFunction : BaseObjectiveFunction { - public RosenbrockEvaluation() + public RosenbrockObjectiveFunction() : base(true, true) { } protected override void SetValue() { - this.ValueRaw = RosenbrockFunction.Value(this.Point); + ValueRaw = RosenbrockFunction.Value(Point); } protected override void SetGradient() { - this.GradientRaw = RosenbrockFunction.Gradient(this.Point); + GradientRaw = RosenbrockFunction.Gradient(Point); } protected override void SetHessian() { - this.HessianRaw = RosenbrockFunction.Hessian(this.Point); + HessianRaw = RosenbrockFunction.Hessian(Point); } - public override IEvaluation CreateNew() + public override IObjectiveFunction CreateNew() { - return new RosenbrockEvaluation(); + return new RosenbrockObjectiveFunction(); } } @@ -42,10 +38,10 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests [Test] public void FindMinimum_Rosenbrock_Easy() { - var obj = new RosenbrockEvaluation(); + var obj = new RosenbrockObjectiveFunction(); var solver = new NewtonMinimizer(1e-5, 1000); - var result = solver.FindMinimum(obj, new MathNet.Numerics.LinearAlgebra.Double.DenseVector(new double[] { 1.2, 1.2 })); + var result = solver.FindMinimum(obj, new DenseVector(new[] { 1.2, 1.2 })); 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)); @@ -54,9 +50,9 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests [Test] public void FindMinimum_Rosenbrock_Hard() { - var obj = new RosenbrockEvaluation(); + var obj = new RosenbrockObjectiveFunction(); var solver = new NewtonMinimizer(1e-5, 1000); - var result = solver.FindMinimum(obj, new MathNet.Numerics.LinearAlgebra.Double.DenseVector(new double[] { -1.2, 1.0 })); + var result = solver.FindMinimum(obj, new DenseVector(new[] { -1.2, 1.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)); @@ -65,9 +61,9 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests [Test] public void FindMinimum_Rosenbrock_Overton() { - var obj = new RosenbrockEvaluation(); + var obj = new RosenbrockObjectiveFunction(); var solver = new NewtonMinimizer(1e-5, 1000); - var result = solver.FindMinimum(obj, new MathNet.Numerics.LinearAlgebra.Double.DenseVector(new double[] { -0.9, -0.5 })); + var result = solver.FindMinimum(obj, new DenseVector(new[] { -0.9, -0.5 })); 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)); @@ -76,9 +72,9 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests [Test] public void FindMinimum_Linesearch_Rosenbrock_Easy() { - var obj = new RosenbrockEvaluation(); + var obj = new RosenbrockObjectiveFunction(); var solver = new NewtonMinimizer(1e-5, 1000, true); - var result = solver.FindMinimum(obj, new MathNet.Numerics.LinearAlgebra.Double.DenseVector(new double[] { 1.2, 1.2 })); + var result = solver.FindMinimum(obj, new DenseVector(new[] { 1.2, 1.2 })); 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)); @@ -87,9 +83,9 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests [Test] public void FindMinimum_Linesearch_Rosenbrock_Hard() { - var obj = new RosenbrockEvaluation(); + var obj = new RosenbrockObjectiveFunction(); var solver = new NewtonMinimizer(1e-5, 1000, true); - var result = solver.FindMinimum(obj, new MathNet.Numerics.LinearAlgebra.Double.DenseVector(new double[] { -1.2, 1.0 })); + var result = solver.FindMinimum(obj, new DenseVector(new[] { -1.2, 1.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)); @@ -98,9 +94,9 @@ namespace MathNet.Numerics.UnitTests.OptimizationTests [Test] public void FindMinimum_Linesearch_Rosenbrock_Overton() { - var obj = new RosenbrockEvaluation(); + var obj = new RosenbrockObjectiveFunction(); var solver = new NewtonMinimizer(1e-5, 1000, true); - var result = solver.FindMinimum(obj, new MathNet.Numerics.LinearAlgebra.Double.DenseVector(new double[] { -0.9, -0.5 })); + var result = solver.FindMinimum(obj, new DenseVector(new[] { -0.9, -0.5 })); 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));