Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/10/12 13:28:55 (12 years ago)
Author:
gkronber
Message:

#1902 implemented all mean and covariance functions with parameters as ParameterizedNamedItems

File:
1 edited

Legend:

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

    r8484 r8612  
    2424using HeuristicLab.Common;
    2525using HeuristicLab.Core;
     26using HeuristicLab.Data;
    2627using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2728
     
    3031  [Item(Name = "CovarianceNoise",
    3132    Description = "Noise covariance function for Gaussian processes.")]
    32   public class CovarianceNoise : Item, ICovarianceFunction {
     33  public sealed class CovarianceNoise : ParameterizedNamedItem, ICovarianceFunction {
     34
     35
    3336    [Storable]
    3437    private double sf2;
    35     public double Scale { get { return sf2; } }
     38    [Storable]
     39    private readonly HyperParameter<DoubleValue> scaleParameter;
     40    public IValueParameter<DoubleValue> ScaleParameter {
     41      get { return scaleParameter; }
     42    }
    3643
    3744    [StorableConstructor]
    38     protected CovarianceNoise(bool deserializing)
     45    private CovarianceNoise(bool deserializing)
    3946      : base(deserializing) {
    4047    }
    4148
    42     protected CovarianceNoise(CovarianceNoise original, Cloner cloner)
     49    private CovarianceNoise(CovarianceNoise original, Cloner cloner)
    4350      : base(original, cloner) {
     51      this.scaleParameter = cloner.Clone(original.scaleParameter);
    4452      this.sf2 = original.sf2;
     53      RegisterEvents();
    4554    }
    4655
    4756    public CovarianceNoise()
    4857      : base() {
     58      Name = ItemName;
     59      Description = ItemDescription;
     60
     61      this.scaleParameter = new HyperParameter<DoubleValue>("Scale", "The scale of noise.");
     62      Parameters.Add(this.scaleParameter);
     63
     64      RegisterEvents();
    4965    }
    5066
     
    5369    }
    5470
     71    [StorableHook(HookType.AfterDeserialization)]
     72    private void AfterDeserialization() {
     73      RegisterEvents();
     74    }
     75
     76    private void RegisterEvents() {
     77      Util.AttachValueChangeHandler<DoubleValue, double>(scaleParameter, () => { sf2 = scaleParameter.Value.Value; });
     78    }
     79
    5580    public int GetNumberOfParameters(int numberOfVariables) {
    56       return 1;
     81      return scaleParameter.Fixed ? 0 : 1;
    5782    }
    5883
    5984    public void SetParameter(double[] hyp) {
    60       this.sf2 = Math.Exp(2 * hyp[0]);
     85      if (!scaleParameter.Fixed) {
     86        scaleParameter.SetValue(new DoubleValue(Math.Exp(2 * hyp[0])));
     87      } else {
     88        if (hyp.Length > 0) throw new ArgumentException("The length of the parameter vector does not match the number of free parameters for CovarianceNoise", "hyp");
     89      }
    6190    }
    6291
Note: See TracChangeset for help on using the changeset viewer.