Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Problems.GaussianProcessTuning/Grammar.cs @ 10757

Last change on this file since 10757 was 10757, checked in by gkronber, 10 years ago

#1967 removed obsolete classes and cleaned up the implementation. Added the ProblemInstanceProvider interface to allow loading of CSV files.

File size: 6.8 KB
Line 
1using System.Collections.Generic;
2using System.Linq;
3using HeuristicLab.Common;
4using HeuristicLab.Core;
5using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
6using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
7
8namespace HeuristicLab.Problems.GaussianProcessTuning {
9  [StorableClass]
10  [Item("Gaussian Process Configuration Grammar", "The grammar for the Gaussian process configration problem.")]
11  public sealed class Grammar : SymbolicExpressionGrammar {
12    [Storable]
13    private int dimension;
14    public int Dimension {
15      get { return dimension; }
16      set {
17        if (dimension != value) {
18          dimension = value;
19          UpdateSymbolDimension();
20        }
21      }
22    }
23
24    [StorableConstructor]
25    private Grammar(bool deserializing) : base(deserializing) { }
26    private Grammar(Grammar original, Cloner cloner)
27      : base(original, cloner) {
28    }
29
30    public Grammar()
31      : base("Gaussian Process Configuration Grammar", "The grammar for the Gaussian process configuration problem.") {
32      Dimension = 10;
33      Initialize();
34    }
35
36    [StorableHook(HookType.AfterDeserialization)]
37    private void AfterDeserialization() {
38    }
39    public override IDeepCloneable Clone(Cloner cloner) {
40      return new Grammar(this, cloner);
41    }
42    private void Initialize() {
43      // create all symbols
44      var meanZero = new MeanZero();
45      //var meanOne = new MeanOne();
46      //var meanConst = new MeanConst();
47      //var meanLinear = new MeanLinear(Dimension);
48      //var meanScale = new MeanScale();
49      //var meanSum = new MeanSum();
50      //var meanProd = new MeanProd();
51      //var meanPow2 = new MeanPow(2) { Name = "MeanPow2" };
52      //var meanPow3 = new MeanPow(3) { Name = "MeanPow3" };
53      //var meanMask = new MeanMask(Dimension);
54      var covConst = new CovConst();
55      var covLin = new CovLin();
56      var covLinArd = new CovLinArd(Dimension);
57      var covSeArd = new CovSeArd(Dimension);
58      var covSeIso = new CovSeIso();
59      var covRQard = new CovRQArd(Dimension);
60      var covRQiso = new CovRQIso();
61      var covNN = new CovNn();
62      var covPoly = new CovPoly();
63      var covPPoly = new CovPiecewisePoly();
64      var covMatern1 = new CovMatern(1);
65      covMatern1.Name = "CovMatern1";
66      var covMatern3 = new CovMatern(3);
67      covMatern3.Name = "CovMatern3";
68      var covMatern5 = new CovMatern(5);
69      covMatern5.Name = "CovMatern5";
70      var covPeriodic = new CovPeriodic();
71      var covPeriodic1 = new CovPeriodic(1.0);
72      covPeriodic1.Name = "CovPeriodic(1.0)";
73      //var covPeriodicCO = new CovPeriodic(0.021817864467425927);
74      //covPeriodicCO.Name = "CovPeriodicCO";
75      var covNoise = new CovNoise();
76      var covScale = new CovScale();
77      var covSum = new CovSum();
78      var covProd = new CovProd();
79      var covMask = new CovMask(Dimension);
80      var likGauss = new LikGauss();
81
82      var configurationStartSymbol = new ConfigurationStartSymbol();
83
84      var meanSymbols = new List<ISymbol>()
85                         {
86                           meanZero,
87                            //meanConst,
88                            //meanLinear,
89                            //meanSum, 
90                            //meanProd,
91                            //meanPow2,
92                            //meanPow3,
93                            //meanMask,
94                         };
95      var covSymbols = new List<ISymbol>()
96                         {
97                            covConst,
98                            covLin,
99                            covLinArd,
100                            covSeArd,
101                            covSeIso,
102                            covRQiso,
103                            covRQard,
104                            covMatern1,
105                            covMatern3,
106                            covMatern5,
107                            covNN,
108                            covPoly,
109                            covPPoly,
110                            covPeriodic,
111                            covPeriodic1,
112                            //covPeriodicCO,
113                            covNoise,
114                            covScale,
115                            covSum,
116                            covProd, 
117                            covMask,
118                         };
119      var likSymbols = new List<ISymbol>()
120                         {
121                           likGauss
122                         };
123      var allSymbols = covSymbols.Concat(meanSymbols).Concat(likSymbols);
124
125      AddSymbol(configurationStartSymbol);
126      // add all symbols to the grammar
127      foreach (var s in allSymbols)
128        AddSymbol(s);
129
130      AddAllowedChildSymbol(StartSymbol, configurationStartSymbol, 0);
131
132      foreach (var meanSymbol in meanSymbols) {
133        AddAllowedChildSymbol(configurationStartSymbol, meanSymbol, 0);
134      }
135      foreach (var covSymbol in covSymbols) {
136        AddAllowedChildSymbol(configurationStartSymbol, covSymbol, 1);
137      }
138      foreach (var likSymbol in likSymbols) {
139        AddAllowedChildSymbol(configurationStartSymbol, likSymbol, 2);
140      }
141      //foreach (var meanFunctionSymbol in new ISymbol[] { meanSum, meanProd }) {
142      //  foreach (var meanSymbol in meanSymbols) {
143      //    for (int i = 0; i < meanFunctionSymbol.MaximumArity; i++) {
144      //      AddAllowedChildSymbol(meanFunctionSymbol, meanSymbol, i);
145      //    }
146      //  }
147      //}
148
149      foreach (var covFunctionSymbol in new ISymbol[] { covSum, covProd, covScale }) {
150        foreach (var covSymbol in covSymbols) {
151          for (int i = 0; i < covFunctionSymbol.MaximumArity; i++) {
152            AddAllowedChildSymbol(covFunctionSymbol, covSymbol, i);
153          }
154        }
155      }
156
157      // mask
158      foreach (var covSymbol in new List<ISymbol>()
159                         {
160                            covConst,
161                            covLin,
162                            covLinArd,
163                            covSeArd,
164                            covSeIso,
165                            covRQiso,
166                            covRQard,
167                            covMatern1,
168                            covMatern3,
169                            covMatern5,
170                            covNN,
171                            covPoly,
172                            covPPoly,
173                            covPeriodic,
174                            covPeriodic1,
175                            //covPeriodicCO,
176                         }) {
177        for (int i = 0; i < covMask.MaximumArity; i++) {
178          AddAllowedChildSymbol(covMask, covSymbol, i);
179        }
180      }
181    }
182
183    private void UpdateSymbolDimension() {
184      foreach (var s in Symbols.OfType<IDimensionSymbol>()) {
185        s.Dimension = dimension;
186      }
187    }
188  }
189}
Note: See TracBrowser for help on using the repository browser.