1  #region License Information


2  /* HeuristicLab


3  * Copyright (C) 20022012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)


4  *


5  * This file is part of HeuristicLab.


6  *


7  * HeuristicLab is free software: you can redistribute it and/or modify


8  * it under the terms of the GNU General Public License as published by


9  * the Free Software Foundation, either version 3 of the License, or


10  * (at your option) any later version.


11  *


12  * HeuristicLab is distributed in the hope that it will be useful,


13  * but WITHOUT ANY WARRANTY; without even the implied warranty of


14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the


15  * GNU General Public License for more details.


16  *


17  * You should have received a copy of the GNU General Public License


18  * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.


19  */


20  #endregion


21 


22  using System;


23  using System.Collections.Generic;


24  using HeuristicLab.Common;


25  using HeuristicLab.Core;


26  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;


27 


28  namespace HeuristicLab.Algorithms.DataAnalysis {


29  [StorableClass]


30  [Item(Name = "CovarianceLinear", Description = "Linear covariance function for Gaussian processes.")]


31  public class CovarianceLinear : Item, ICovarianceFunction {


32  public int GetNumberOfParameters(int numberOfVariables) {


33  return 0;


34  }


35  [StorableConstructor]


36  protected CovarianceLinear(bool deserializing) : base(deserializing) { }


37  protected CovarianceLinear(CovarianceLinear original, Cloner cloner)


38  : base(original, cloner) {


39  }


40  public CovarianceLinear()


41  : base() {


42  }


43 


44  public override IDeepCloneable Clone(Cloner cloner) {


45  return new CovarianceLinear(this, cloner);


46  }


47 


48  public void SetParameter(double[] hyp) {


49  if (hyp.Length > 0) throw new ArgumentException("No hyperparameters are allowed for the linear covariance function.");


50  }


51 


52  public double GetCovariance(double[,] x, int i, int j) {


53  return Util.ScalarProd(Util.GetRow(x, i), Util.GetRow(x, j));


54  }


55 


56  public IEnumerable<double> GetGradient(double[,] x, int i, int j) {


57  yield break;


58  }


59 


60  public double GetCrossCovariance(double[,] x, double[,] xt, int i, int j) {


61  return Util.ScalarProd(Util.GetRow(x, i), Util.GetRow(xt, j));


62  }


63  }


64  }

