Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/02/12 17:27:46 (12 years ago)
Author:
gkronber
Message:

#1902 implemented LM-BFGS algorithm and improved GPR

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsInitializer.cs

    r8375 r8396  
    2525using HeuristicLab.Core;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Encodings.RealVectorEncoding;
    2728using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2829using HeuristicLab.Operators;
     
    3334namespace HeuristicLab.Algorithms.DataAnalysis {
    3435  [StorableClass]
    35   [Item(Name = "BFGSInitializer", Description = "Initializes the necessary data structures for the BFGS algorithm.")]
    36   public sealed class BFGSInitializer : SingleSuccessorOperator {
    37     private const string DimensionParameterName = "Dimension";
     36  [Item(Name = "LBFGS Initializer", Description = "Initializes the necessary data structures for the LM-BFGS algorithm.")]
     37  public sealed class LbfgsInitializer : SingleSuccessorOperator {
    3838    private const string PointParameterName = "Point";
    39     private const string BFGSStateParameterName = "BFGSState";
     39    private const string StateParameterName = "State";
    4040    private const string IterationsParameterName = "Iterations";
     41    private const string ApproximateGradientsParameterName = "ApproximateGradients";
    4142
    4243    #region Parameter Properties
    4344    // in
    44     public ILookupParameter<IntValue> DimensionParameter {
    45       get { return (ILookupParameter<IntValue>)Parameters[DimensionParameterName]; }
    46     }
    4745    public ILookupParameter<IntValue> IterationsParameter {
    4846      get { return (ILookupParameter<IntValue>)Parameters[IterationsParameterName]; }
    4947    }
     48    public ILookupParameter<RealVector> PointParameter {
     49      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
     50    }
    5051    // out
    51     public ILookupParameter<DoubleArray> PointParameter {
    52       get { return (ILookupParameter<DoubleArray>)Parameters[PointParameterName]; }
     52    public ILookupParameter<LbfgsState> StateParameter {
     53      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
    5354    }
    54     public ILookupParameter<BFGSState> BFGSStateParameter {
    55       get { return (ILookupParameter<BFGSState>)Parameters[BFGSStateParameterName]; }
     55    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
     56      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
    5657    }
    5758
     
    6061
    6162    #region Properties
    62     private IntValue Dimension { get { return DimensionParameter.ActualValue; } }
     63    private RealVector Point { get { return PointParameter.ActualValue; } }
    6364    private IntValue Iterations { get { return IterationsParameter.ActualValue; } }
     65    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
    6466    #endregion
    6567
    6668    [StorableConstructor]
    67     private BFGSInitializer(bool deserializing) : base(deserializing) { }
    68     private BFGSInitializer(BFGSInitializer original, Cloner cloner) : base(original, cloner) { }
    69     public BFGSInitializer()
     69    private LbfgsInitializer(bool deserializing) : base(deserializing) { }
     70    private LbfgsInitializer(LbfgsInitializer original, Cloner cloner) : base(original, cloner) { }
     71    public LbfgsInitializer()
    7072      : base() {
    7173      // in
    72       Parameters.Add(new LookupParameter<IntValue>(DimensionParameterName, "The length of the vector to optimize."));
    73       Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The maximal number of iterations for the BFGS algorithm."));
     74      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The initial point for the LM-BFGS algorithm."));
     75      Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The maximal number of iterations for the LM-BFGS algorithm."));
     76      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
     77                                                    "Flag that indicates if gradients should be approximated."));
    7478      // out
    75       Parameters.Add(new LookupParameter<DoubleArray>(PointParameterName, "The initial point for the BFGS algorithm."));
    76       Parameters.Add(new LookupParameter<BFGSState>(BFGSStateParameterName, "The state of the BFGS algorithm."));
     79      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
    7780    }
    7881
    7982    public override IDeepCloneable Clone(Cloner cloner) {
    80       return new BFGSInitializer(this, cloner);
     83      return new LbfgsInitializer(this, cloner);
    8184    }
    8285
    8386    public override IOperation Apply() {
    84       int n = Dimension.Value;
    85       double[] initialPoint = Enumerable.Repeat(0.0, n).ToArray();
     87      double[] initialPoint = Point.ToArray();
     88      int n = initialPoint.Length;
    8689      alglib.minlbfgs.minlbfgsstate state = new alglib.minlbfgs.minlbfgsstate();
    87       alglib.minlbfgs.minlbfgscreate(n, Math.Min(n, 7), initialPoint, state);
     90      if (ApproximateGradients.Value) {
     91        alglib.minlbfgs.minlbfgscreatef(n, Math.Min(n, 7), initialPoint, 1E-5, state);
     92      } else {
     93        alglib.minlbfgs.minlbfgscreate(n, Math.Min(n, 7), initialPoint, state);
     94      }
    8895      alglib.minlbfgs.minlbfgssetcond(state, 0, 0, 0, Iterations.Value);
    8996      alglib.minlbfgs.minlbfgssetxrep(state, true);
    9097
    91       PointParameter.ActualValue = new DoubleArray(initialPoint);
    92       BFGSStateParameter.ActualValue = new BFGSState(state);
     98      PointParameter.ActualValue = new RealVector(initialPoint);
     99      StateParameter.ActualValue = new LbfgsState(state);
    93100      return base.Apply();
    94101    }
Note: See TracChangeset for help on using the changeset viewer.