Changeset 8396 for trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsInitializer.cs
- Timestamp:
- 08/02/12 17:27:46 (12 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsInitializer.cs
r8375 r8396 25 25 using HeuristicLab.Core; 26 26 using HeuristicLab.Data; 27 using HeuristicLab.Encodings.RealVectorEncoding; 27 28 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 28 29 using HeuristicLab.Operators; … … 33 34 namespace HeuristicLab.Algorithms.DataAnalysis { 34 35 [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 { 38 38 private const string PointParameterName = "Point"; 39 private const string BFGSStateParameterName = "BFGSState";39 private const string StateParameterName = "State"; 40 40 private const string IterationsParameterName = "Iterations"; 41 private const string ApproximateGradientsParameterName = "ApproximateGradients"; 41 42 42 43 #region Parameter Properties 43 44 // in 44 public ILookupParameter<IntValue> DimensionParameter {45 get { return (ILookupParameter<IntValue>)Parameters[DimensionParameterName]; }46 }47 45 public ILookupParameter<IntValue> IterationsParameter { 48 46 get { return (ILookupParameter<IntValue>)Parameters[IterationsParameterName]; } 49 47 } 48 public ILookupParameter<RealVector> PointParameter { 49 get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; } 50 } 50 51 // 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]; } 53 54 } 54 public ILookupParameter<B FGSState> BFGSStateParameter {55 get { return (ILookupParameter<B FGSState>)Parameters[BFGSStateParameterName]; }55 public ILookupParameter<BoolValue> ApproximateGradientsParameter { 56 get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; } 56 57 } 57 58 … … 60 61 61 62 #region Properties 62 private IntValue Dimension { get { return DimensionParameter.ActualValue; } }63 private RealVector Point { get { return PointParameter.ActualValue; } } 63 64 private IntValue Iterations { get { return IterationsParameter.ActualValue; } } 65 private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } } 64 66 #endregion 65 67 66 68 [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() 70 72 : base() { 71 73 // 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.")); 74 78 // 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.")); 77 80 } 78 81 79 82 public override IDeepCloneable Clone(Cloner cloner) { 80 return new BFGSInitializer(this, cloner);83 return new LbfgsInitializer(this, cloner); 81 84 } 82 85 83 86 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; 86 89 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 } 88 95 alglib.minlbfgs.minlbfgssetcond(state, 0, 0, 0, Iterations.Value); 89 96 alglib.minlbfgs.minlbfgssetxrep(state, true); 90 97 91 PointParameter.ActualValue = new DoubleArray(initialPoint);92 BFGSStateParameter.ActualValue = new BFGSState(state);98 PointParameter.ActualValue = new RealVector(initialPoint); 99 StateParameter.ActualValue = new LbfgsState(state); 93 100 return base.Apply(); 94 101 }
Note: See TracChangeset
for help on using the changeset viewer.