Free cookie consent management tool by TermsFeed Policy Generator

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

Last change on this file since 9212 was 9212, checked in by gkronber, 11 years ago

#1967: worked on Gaussian Process evolution problem

File size: 6.4 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 meanOne = new MeanOne();
45      var meanConst = new MeanConst();
46      var meanLinear = new MeanLinear(Dimension);
47      //var meanScale = new MeanScale();
48      var meanSum = new MeanSum();
49      var meanProd = new MeanProd();
50      //var meanPow2 = new MeanPow(2) { Name = "MeanPow2" };
51      //var meanPow3 = new MeanPow(3) { Name = "MeanPow3" };
52      //var meanMask = new MeanMask(Dimension);
53      var covConst = new CovConst();
54      var covLin = new CovLin();
55      var covLinArd = new CovLinArd(Dimension);
56      var covSeArd = new CovSeArd(Dimension);
57      var covSeIso = new CovSeIso();
58      var covRQard = new CovRQArd(Dimension);
59      var covRQiso = new CovRQIso();
60      var covMatern1 = new CovMatern(1);
61      covMatern1.Name = "CovMatern1";
62      var covMatern3 = new CovMatern(3);
63      covMatern3.Name = "CovMatern3";
64      var covMatern5 = new CovMatern(5);
65      covMatern5.Name = "CovMatern5";
66      var covPeriodic = new CovPeriodic();
67      var covPeriodic1 = new CovPeriodic(1.0);
68      covPeriodic1.Name = "CovPeriodic(1.0)";
69      var covPeriodicCO = new CovPeriodic(0.021817864467425927);
70      covPeriodicCO.Name = "CovPeriodicCO";
71      var covNoise = new CovNoise();
72      var covScale = new CovScale();
73      var covSum = new CovSum();
74      var covProd = new CovProd();
75      var covMask = new CovMask(Dimension);
76      var likGauss = new LikGauss();
77
78      var configurationStartSymbol = new ConfigurationStartSymbol();
79
80      var meanSymbols = new List<ISymbol>()
81                         {
82                            meanConst,
83                            meanLinear,
84                            meanSum, 
85                            meanProd,
86                            //meanPow2,
87                            //meanPow3,
88                            //meanMask,
89                         };
90      var covSymbols = new List<ISymbol>()
91                         {
92                            covConst,
93                            covLin,
94                            covLinArd,
95                            covSeArd,
96                            covSeIso,
97                            covRQiso,
98                            covRQard,
99                            covMatern1,
100                            covMatern3,
101                            covMatern5,
102                            covPeriodic,
103                            covPeriodic1,
104                            covPeriodicCO,
105                            covNoise,
106                            covScale,
107                            covSum,
108                            covProd, 
109                            covMask,
110                         };
111      var likSymbols = new List<ISymbol>()
112                         {
113                           likGauss
114                         };
115      var allSymbols = covSymbols.Concat(meanSymbols).Concat(likSymbols);
116
117      AddSymbol(configurationStartSymbol);
118      // add all symbols to the grammar
119      foreach (var s in allSymbols)
120        AddSymbol(s);
121
122      AddAllowedChildSymbol(StartSymbol, configurationStartSymbol, 0);
123
124      foreach (var meanSymbol in meanSymbols) {
125        AddAllowedChildSymbol(configurationStartSymbol, meanSymbol, 0);
126      }
127      foreach (var covSymbol in covSymbols) {
128        AddAllowedChildSymbol(configurationStartSymbol, covSymbol, 1);
129      }
130      foreach (var likSymbol in likSymbols) {
131        AddAllowedChildSymbol(configurationStartSymbol, likSymbol, 2);
132      }
133      foreach (var meanFunctionSymbol in new ISymbol[] { meanSum, meanProd }) {
134        foreach (var meanSymbol in meanSymbols) {
135          for (int i = 0; i < meanFunctionSymbol.MaximumArity; i++) {
136            AddAllowedChildSymbol(meanFunctionSymbol, meanSymbol, i);
137          }
138        }
139      }
140
141      foreach (var covFunctionSymbol in new ISymbol[] { covSum, covProd, covScale }) {
142        foreach (var covSymbol in covSymbols) {
143          for (int i = 0; i < covFunctionSymbol.MaximumArity; i++) {
144            AddAllowedChildSymbol(covFunctionSymbol, covSymbol, i);
145          }
146        }
147      }
148
149      // mask
150      foreach (var covSymbol in new List<ISymbol>()
151                         {
152                            covConst,
153                            covLin,
154                            covLinArd,
155                            covSeArd,
156                            covSeIso,
157                            covRQiso,
158                            covRQard,
159                            covMatern1,
160                            covMatern3,
161                            covMatern5,
162                            covPeriodic,
163                            covPeriodic1,
164                            covPeriodicCO,
165                         }) {
166        for (int i = 0; i < covMask.MaximumArity; i++) {
167          AddAllowedChildSymbol(covMask, covSymbol, i);
168        }
169      }
170
171    }
172
173    private void UpdateSymbolDimension() {
174      foreach (var s in Symbols.OfType<IDimensionSymbol>()) {
175        s.Dimension = dimension;
176      }
177    }
178  }
179}
Note: See TracBrowser for help on using the repository browser.