Free cookie consent management tool by TermsFeed Policy Generator

source: branches/GP-Refactoring-713/sources/HeuristicLab.GP.StructureIdentification/3.3/ModelAnalyzerExporter.cs @ 2212

Last change on this file since 2212 was 2212, checked in by gkronber, 15 years ago

GP Refactoring: #713

  • added project GP.Operators
  • moved operators from plugin GP to plugin GP.Operators
  • deleted unused constraints
  • removed dependency of GP plugins on Constraints plugin
  • moved StructID functions into directory Symbols
  • deleted unused class FunView
  • implemented add and remove functionality for the FunctionLibraryView
File size: 8.1 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2008 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
22using HeuristicLab.GP.Interfaces;
23
24namespace HeuristicLab.GP.StructureIdentification {
25  public class ModelAnalyzerExporter : IFunctionTreeExporter, IFunctionTreeNameGenerator {
26    #region IFunctionTreeExporter Members
27
28    public string Name {
29      get {
30        return "HL2 ModelAnalyzer Exporter";
31      }
32    }
33
34    public bool TryExport(IFunctionTree tree, out string exported) {
35      try {
36        exported = Export(tree);
37        return true;
38      } catch(UnknownFunctionException) {
39        exported = "";
40        return false;
41      }
42    }
43
44    public string Export(IFunctionTree tree) {
45      string result = ExportFunction(tree.Function, tree);
46      if(tree.SubTrees.Count>0)
47        result += "(\n";
48      foreach(IFunctionTree subTree in tree.SubTrees) {
49        result += Export(subTree);
50        result += ";\n";
51      }
52      result = result.TrimEnd(';', '\n');
53      if(tree.SubTrees.Count > 0) result += ")";
54      return result;
55    }
56
57    #endregion
58
59    private string ExportFunction(IFunction function, IFunctionTree tree) {
60      // this is smelly, if there is a cleaner way to have a 'dynamic' visitor
61      // please let me know! (gkronber 14.10.2008)
62      if(function is Addition) return ((Addition)function).ExportToHL2(tree);
63      if(function is And) return ((And)function).ExportToHL2(tree);
64      if(function is Average) return ((Average)function).ExportToHL2(tree);
65      if(function is Constant) return ((Constant)function).ExportToHL2(tree);
66      if(function is Cosinus) return ((Cosinus)function).ExportToHL2(tree);
67      if(function is Differential) return ((Differential)function).ExportToHL2(tree);
68      if(function is Division) return ((Division)function).ExportToHL2(tree);
69      if(function is Equal) return ((Equal)function).ExportToHL2(tree);
70      if(function is Exponential) return ((Exponential)function).ExportToHL2(tree);
71      if(function is GreaterThan) return ((GreaterThan)function).ExportToHL2(tree);
72      if(function is IfThenElse) return ((IfThenElse)function).ExportToHL2(tree);
73      if(function is LessThan) return ((LessThan)function).ExportToHL2(tree);
74      if(function is Logarithm) return ((Logarithm)function).ExportToHL2(tree);
75      if(function is Multiplication) return ((Multiplication)function).ExportToHL2(tree);
76      if(function is Not) return ((Not)function).ExportToHL2(tree);
77      if(function is Or) return ((Or)function).ExportToHL2(tree);
78      if(function is Power) return ((Power)function).ExportToHL2(tree);
79      if(function is Signum) return ((Signum)function).ExportToHL2(tree);
80      if(function is Sinus) return ((Sinus)function).ExportToHL2(tree);
81      if(function is Sqrt) return ((Sqrt)function).ExportToHL2(tree);
82      if(function is Subtraction) return ((Subtraction)function).ExportToHL2(tree);
83      if(function is Tangens) return ((Tangens)function).ExportToHL2(tree);
84      if(function is Variable) return ((Variable)function).ExportToHL2(tree);
85      if(function is Xor) return ((Xor)function).ExportToHL2(tree);
86      throw new UnknownFunctionException(function.Name);
87    }
88
89    #region IFunctionTreeNameGenerator Members
90
91    string IFunctionTreeNameGenerator.Name {
92      get { return "HL2 Representation"; }
93    }
94
95    public string GetName(IFunctionTree tree) {
96      string name = "";
97      try {
98        name = ExportFunction(tree.Function, tree);
99      } catch(UnknownFunctionException) {
100        name = "N/A";
101      }
102      return name;
103    }
104
105    #endregion
106  }
107
108  internal static class HL2ExporterExtensions {
109    private static string GetHL2FunctionName(string name) {
110      return "[F]" + name ;
111    }
112
113    public static string ExportToHL2(this Addition addition, IFunctionTree tree) {
114      return GetHL2FunctionName("Addition[0]");
115    }
116
117    public static string ExportToHL2(this Constant constant, IFunctionTree tree) {
118      double value = ((ConstantFunctionTree)tree).Value;
119      return "[T]Constant(" + value.ToString("r") + ";0;0)";
120    }
121
122    public static string ExportToHL2(this Cosinus cosinus, IFunctionTree tree) {
123      return GetHL2FunctionName("Trigonometrics[1]");
124    }
125
126    public static string ExportToHL2(this Differential differential, IFunctionTree tree) {
127      var varTree = (VariableFunctionTree)tree;
128      return "[T]Differential(" + varTree.Weight.ToString("r") + ";" + varTree.VariableName + ";" + -varTree.SampleOffset + ")";
129    }
130
131    public static string ExportToHL2(this Division division, IFunctionTree tree) {
132      return GetHL2FunctionName("Division[0]");
133    }
134
135    public static string ExportToHL2(this Exponential exponential, IFunctionTree tree) {
136      return GetHL2FunctionName("Exponential[0]");
137    }
138
139    public static string ExportToHL2(this Logarithm logarithm, IFunctionTree tree) {
140      return GetHL2FunctionName("Logarithm[0]");
141    }
142
143    public static string ExportToHL2(this Multiplication multiplication, IFunctionTree tree) {
144      return GetHL2FunctionName("Multiplication[0]");
145    }
146
147    public static string ExportToHL2(this Power power, IFunctionTree tree) {
148      return GetHL2FunctionName("Power[0]");
149    }
150
151    public static string ExportToHL2(this Signum signum, IFunctionTree tree) {
152      return GetHL2FunctionName("Signum[0]");
153    }
154
155    public static string ExportToHL2(this Sinus sinus, IFunctionTree tree) {
156      return GetHL2FunctionName("Trigonometrics[0]");
157    }
158
159    public static string ExportToHL2(this Sqrt sqrt, IFunctionTree tree) {
160      return GetHL2FunctionName("Sqrt[0]");
161    }
162
163    public static string ExportToHL2(this Subtraction substraction, IFunctionTree tree) {
164      return GetHL2FunctionName("Subtraction[0]");
165    }
166
167    public static string ExportToHL2(this Tangens tangens, IFunctionTree tree) {
168      return GetHL2FunctionName("Trigonometrics[2]");
169    }
170
171    public static string ExportToHL2(this Variable variable, IFunctionTree tree) {
172      var varTree = (VariableFunctionTree)tree;
173      return "[T]Variable(" + varTree.Weight.ToString("r") + ";" + varTree.VariableName + ";" + -varTree.SampleOffset + ")";
174    }
175
176    public static string ExportToHL2(this And and, IFunctionTree tree) {
177      return GetHL2FunctionName("Logical[0]");
178    }
179
180    public static string ExportToHL2(this Average average, IFunctionTree tree) {
181      return GetHL2FunctionName("Average[0]");
182    }
183
184    public static string ExportToHL2(this IfThenElse ifThenElse, IFunctionTree tree) {
185      return GetHL2FunctionName("Conditional[0]");
186    }
187
188    public static string ExportToHL2(this Not not, IFunctionTree tree) {
189      return GetHL2FunctionName("Logical[2]");
190    }
191
192    public static string ExportToHL2(this Or or, IFunctionTree tree) {
193      return GetHL2FunctionName("Logical[1]");
194    }
195
196    public static string ExportToHL2(this Xor xor, IFunctionTree tree) {
197      return GetHL2FunctionName("Logical[3]");
198    }
199
200    public static string ExportToHL2(this Equal equal, IFunctionTree tree) {
201      return GetHL2FunctionName("Boolean[2]");
202    }
203
204    public static string ExportToHL2(this LessThan lessThan, IFunctionTree tree) {
205      return GetHL2FunctionName("Boolean[0]");
206    }
207
208    public static string ExportToHL2(this GreaterThan greaterThan, IFunctionTree tree) {
209      return GetHL2FunctionName("Boolean[4]");
210    }
211  }
212}
Note: See TracBrowser for help on using the repository browser.