Browse Source

Optimization: cleanup, namespaces

pull/391/head
Christoph Ruegg 11 years ago
parent
commit
3e4e5c64d2
  1. 24
      src/Numerics/Optimization/Exceptions.cs
  2. 126
      src/Numerics/Optimization/Implementation/CheckedObjectiveFunction.cs
  3. 2
      src/Numerics/Optimization/LineSearch/LineSearchResult.cs
  4. 2
      src/Numerics/Optimization/LineSearch/WeakWolfeLineSearch.cs
  5. 2
      src/Numerics/Optimization/NewtonMinimizer.cs

24
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

126
src/Numerics/Optimization/Implementation/CheckedObjectiveFunction.cs

@ -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<IObjectiveFunction> ValueChecker { get; private set; }
public Action<IObjectiveFunction> GradientChecker { get; private set; }
public Action<IObjectiveFunction> HessianChecker { get; private set; }
public CheckedObjectiveFunction(IObjectiveFunction objective, Action<IObjectiveFunction> valueChecker, Action<IObjectiveFunction> gradientChecker, Action<IObjectiveFunction> hessianChecker)
{
InnerObjectiveFunction = objective;
ValueChecker = valueChecker;
GradientChecker = gradientChecker;
HessianChecker = hessianChecker;
}
public Vector<double> Point
{
get { return InnerObjectiveFunction.Point; }
}
public void EvaluateAt(Vector<double> 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<double> Gradient
{
get
{
if (!_gradientChecked)
{
Vector<double> 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<double> Hessian
{
get
{
if (!_hessianChecked)
{
Matrix<double> 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; }
}
}
}

2
src/Numerics/Optimization/Implementation/LineSearchResult.cs → src/Numerics/Optimization/LineSearch/LineSearchResult.cs

@ -1,4 +1,4 @@
namespace MathNet.Numerics.Optimization.Implementation
namespace MathNet.Numerics.Optimization.LineSearch
{
public class LineSearchResult : MinimizationResult
{

2
src/Numerics/Optimization/Implementation/WeakWolfeLineSearch.cs → 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
{

2
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
{

Loading…
Cancel
Save