From 3e4e5c64d21a4ba5605e19495bae50bf75fa117d Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Fri, 15 May 2015 13:30:55 +0200 Subject: [PATCH] Optimization: cleanup, namespaces --- src/Numerics/Optimization/Exceptions.cs | 24 +--- .../CheckedObjectiveFunction.cs | 126 ------------------ .../LineSearchResult.cs | 2 +- .../WeakWolfeLineSearch.cs | 2 +- src/Numerics/Optimization/NewtonMinimizer.cs | 2 +- 5 files changed, 9 insertions(+), 147 deletions(-) delete mode 100644 src/Numerics/Optimization/Implementation/CheckedObjectiveFunction.cs rename src/Numerics/Optimization/{Implementation => LineSearch}/LineSearchResult.cs (86%) rename src/Numerics/Optimization/{Implementation => LineSearch}/WeakWolfeLineSearch.cs (98%) diff --git a/src/Numerics/Optimization/Exceptions.cs b/src/Numerics/Optimization/Exceptions.cs index 13560bde..4b95d8fa 100644 --- a/src/Numerics/Optimization/Exceptions.cs +++ b/src/Numerics/Optimization/Exceptions.cs @@ -7,8 +7,8 @@ namespace MathNet.Numerics.Optimization public OptimizationException(string message) : base(message) { } - public OptimizationException(string message, Exception inner_exception) - : base(message, inner_exception) { } + public OptimizationException(string message, Exception innerException) + : base(message, innerException) { } } public class MaximumIterationsException : OptimizationException @@ -24,27 +24,15 @@ namespace MathNet.Numerics.Optimization public EvaluationException(string message, IObjectiveFunction eval) : base(message) { - this.ObjectiveFunction = eval; + ObjectiveFunction = eval; } - public EvaluationException(string message, IObjectiveFunction eval, Exception inner_exception) - : base(message, inner_exception) + public EvaluationException(string message, IObjectiveFunction eval, Exception innerException) + : base(message, innerException) { - this.ObjectiveFunction = eval; + ObjectiveFunction = eval; } - //public EvaluationException(string message, IEvaluation1D eval) - // : base(message) - //{ - // this.Evaluation = new OneDEvaluationExpander(eval); - //} - - //public EvaluationException(string message, IEvaluation1D eval, Exception inner_exception) - // : base(message, inner_exception) - //{ - // this.Evaluation = new OneDEvaluationExpander(eval); - //} - } public class InnerOptimizationException : OptimizationException diff --git a/src/Numerics/Optimization/Implementation/CheckedObjectiveFunction.cs b/src/Numerics/Optimization/Implementation/CheckedObjectiveFunction.cs deleted file mode 100644 index 308d5e6d..00000000 --- a/src/Numerics/Optimization/Implementation/CheckedObjectiveFunction.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using MathNet.Numerics.LinearAlgebra; - -namespace MathNet.Numerics.Optimization.Implementation -{ - public class CheckedObjectiveFunction : IObjectiveFunction - { - private bool _valueChecked; - private bool _gradientChecked; - private bool _hessianChecked; - - 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 CheckedObjectiveFunction(IObjectiveFunction objective, Action valueChecker, Action gradientChecker, Action hessianChecker) - { - InnerObjectiveFunction = objective; - ValueChecker = valueChecker; - GradientChecker = gradientChecker; - HessianChecker = hessianChecker; - } - - public Vector Point - { - get { return InnerObjectiveFunction.Point; } - } - - public void EvaluateAt(Vector point) - { - InnerObjectiveFunction.EvaluateAt(point); - _valueChecked = false; - _gradientChecked = false; - _hessianChecked = false; - } - - public double Value - { - get - { - if (!_valueChecked) - { - double tmp; - try - { - tmp = InnerObjectiveFunction.Value; - } - catch (Exception e) - { - throw new EvaluationException("Objective function evaluation failed.", InnerObjectiveFunction, e); - } - ValueChecker(InnerObjectiveFunction); - _valueChecked = true; - } - return InnerObjectiveFunction.Value; - } - } - - public Vector Gradient - { - get - { - - if (!_gradientChecked) - { - Vector tmp; - try - { - tmp = InnerObjectiveFunction.Gradient; - } - catch (Exception e) - { - throw new EvaluationException("Objective gradient evaluation failed.", InnerObjectiveFunction, e); - } - GradientChecker(InnerObjectiveFunction); - _gradientChecked = true; - } - return InnerObjectiveFunction.Gradient; - } - } - - public Matrix Hessian - { - get - { - - if (!_hessianChecked) - { - Matrix tmp; - try - { - tmp = InnerObjectiveFunction.Hessian; - } - catch (Exception e) - { - throw new EvaluationException("Objective hessian evaluation failed.", InnerObjectiveFunction, e); - } - HessianChecker(InnerObjectiveFunction); - _hessianChecked = true; - } - return InnerObjectiveFunction.Hessian; - } - } - - public IObjectiveFunction CreateNew() - { - return new CheckedObjectiveFunction(InnerObjectiveFunction.CreateNew(), ValueChecker, GradientChecker, HessianChecker); - } - - public IObjectiveFunction Fork() - { - return new CheckedObjectiveFunction(InnerObjectiveFunction.Fork(), ValueChecker, GradientChecker, HessianChecker); - } - - public bool IsGradientSupported - { - get { return InnerObjectiveFunction.IsGradientSupported; } - } - - public bool IsHessianSupported - { - get { return InnerObjectiveFunction.IsHessianSupported; } - } - } -} diff --git a/src/Numerics/Optimization/Implementation/LineSearchResult.cs b/src/Numerics/Optimization/LineSearch/LineSearchResult.cs similarity index 86% rename from src/Numerics/Optimization/Implementation/LineSearchResult.cs rename to src/Numerics/Optimization/LineSearch/LineSearchResult.cs index 70673ca1..df263be0 100644 --- a/src/Numerics/Optimization/Implementation/LineSearchResult.cs +++ b/src/Numerics/Optimization/LineSearch/LineSearchResult.cs @@ -1,4 +1,4 @@ -namespace MathNet.Numerics.Optimization.Implementation +namespace MathNet.Numerics.Optimization.LineSearch { public class LineSearchResult : MinimizationResult { diff --git a/src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs b/src/Numerics/Optimization/LineSearch/WeakWolfeLineSearch.cs similarity index 98% rename from src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs rename to src/Numerics/Optimization/LineSearch/WeakWolfeLineSearch.cs index 4edf7cae..b7acf184 100644 --- a/src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs +++ b/src/Numerics/Optimization/LineSearch/WeakWolfeLineSearch.cs @@ -1,7 +1,7 @@ using System; using MathNet.Numerics.LinearAlgebra; -namespace MathNet.Numerics.Optimization.Implementation +namespace MathNet.Numerics.Optimization.LineSearch { public class WeakWolfeLineSearch { diff --git a/src/Numerics/Optimization/NewtonMinimizer.cs b/src/Numerics/Optimization/NewtonMinimizer.cs index e2e04420..6974baa4 100644 --- a/src/Numerics/Optimization/NewtonMinimizer.cs +++ b/src/Numerics/Optimization/NewtonMinimizer.cs @@ -1,6 +1,6 @@ using System; using MathNet.Numerics.LinearAlgebra; -using MathNet.Numerics.Optimization.Implementation; +using MathNet.Numerics.Optimization.LineSearch; namespace MathNet.Numerics.Optimization {