Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/11 12:50:28 (14 years ago)
Author:
gkronber
Message:

#1418 Implemented variable view that allows to add and remove variable strings (ported from external evaluation views). Implemented formatter and grammar for external evaluation plugin. Fixed bug in symbolic expression view. Fixed bug in run collection variable impact view. Removed unused plugin HeuristicLab.Problems.ExternalEvaluation.GP.Views. Renamed files.

Location:
branches/DataAnalysis Refactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.4
Files:
1 edited
3 copied
3 moved

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/ExternalEvaluationExpressionGrammar.cs

    r5745 r5750  
    2323using HeuristicLab.Common;
    2424using HeuristicLab.Core;
     25using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     26using HeuristicLab.Problems.DataAnalysis.Symbolic;
    2527using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    26 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
    27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2828
    2929namespace HeuristicLab.Problems.ExternalEvaluation.GP {
    3030  [StorableClass]
    31   [Item("FullFunctionalExpressionGrammar", "Represents a grammar for functional expressions using all available functions.")]
    32   public class FullFunctionalExpressionGrammar : DefaultSymbolicExpressionGrammar {
     31  [Item("ExternalEvaluationExpressionGrammar", "Represents a grammar for functional expressions using all available functions.")]
     32  public class ExternalEvaluationExpressionGrammar : SymbolicExpressionGrammar, ISymbolicDataAnalysisGrammar {
    3333    [Storable]
    34     private HeuristicLab.Problems.ExternalEvaluation.GP.Variable variableSymbol;
     34    private HeuristicLab.Problems.DataAnalysis.Symbolic.Variable variableSymbol;
    3535    [StorableConstructor]
    36     protected FullFunctionalExpressionGrammar(bool deserializing) : base(deserializing) { }
    37     protected FullFunctionalExpressionGrammar(FullFunctionalExpressionGrammar original, Cloner cloner) : base(original, cloner) { }
     36    protected ExternalEvaluationExpressionGrammar(bool deserializing) : base(deserializing) { }
     37    protected ExternalEvaluationExpressionGrammar(ExternalEvaluationExpressionGrammar original, Cloner cloner) : base(original, cloner) { }
    3838    public override IDeepCloneable Clone(Cloner cloner) {
    39       return new FullFunctionalExpressionGrammar(this, cloner);
     39      return new ExternalEvaluationExpressionGrammar(this, cloner);
    4040    }
    4141
    42     public FullFunctionalExpressionGrammar()
    43       : base() {
     42    public ExternalEvaluationExpressionGrammar()
     43      : base("ExternalEvaluationExpressionGrammar", "Represents a grammar for functional expressions using all available functions.") {
    4444      Initialize();
    4545    }
    4646
    47     private void Initialize() {
    48       var originalStart = StartSymbol;
    49       if (!(originalStart is ProgramRootSymbol)) {
    50         var root = new ProgramRootSymbol();
    51         AddSymbol(root);
    52         SetMinSubtreeCount(root, 1);
    53         SetMaxSubtreeCount(root, 1);
    54         SetAllowedChild(root, originalStart, 0);
    55 
    56         StartSymbol = root;
    57       }
    58 
     47    private void Initialize() {     
    5948      var add = new Addition();
    6049      var sub = new Subtraction();
     
    7665      constant.MinValue = -20;
    7766      constant.MaxValue = 20;
    78       variableSymbol = new Variable();
     67      variableSymbol = new HeuristicLab.Problems.DataAnalysis.Symbolic.Variable();
    7968
    8069      var allSymbols = new List<Symbol>() { add, sub, mul, div, mean, sin, cos, tan, log, exp, @if, gt, lt, and, or, not, constant, variableSymbol };
     
    8776
    8877      foreach (var funSymb in functionSymbols) {
    89         SetMinSubtreeCount(funSymb, 1);
    90         SetMaxSubtreeCount(funSymb, 3);
     78        SetSubtreeCount(funSymb, 1, 3);
    9179      }
    9280      foreach (var funSymb in unaryFunctionSymbols) {
    93         SetMinSubtreeCount(funSymb, 1);
    94         SetMaxSubtreeCount(funSymb, 1);
     81        SetSubtreeCount(funSymb, 1, 1);
    9582      }
    9683      foreach (var funSymb in binaryFunctionSymbols) {
    97         SetMinSubtreeCount(funSymb, 2);
    98         SetMaxSubtreeCount(funSymb, 2);
     84        SetSubtreeCount(funSymb, 2, 2);
    9985      }
    10086
    101       SetMinSubtreeCount(@if, 3);
    102       SetMaxSubtreeCount(@if, 3);
    103       SetMinSubtreeCount(constant, 0);
    104       SetMaxSubtreeCount(constant, 0);
    105       SetMinSubtreeCount(variableSymbol, 0);
    106       SetMaxSubtreeCount(variableSymbol, 0);
     87      SetSubtreeCount(@if, 3, 3);
     88      SetSubtreeCount(constant, 0, 0);
     89      SetSubtreeCount(variableSymbol, 0, 0);
    10790
    10891      // allow each symbol as child of the start symbol
    10992      foreach (var symb in allSymbols) {
    110         SetAllowedChild(originalStart, symb, 0);
     93        AddAllowedChildSymbol(StartSymbol, symb, 0);
    11194      }
    11295
    11396      // allow each symbol as child of every other symbol (except for terminals that have maxSubtreeCount == 0)
    11497      foreach (var parent in allSymbols) {
    115         for (int i = 0; i < GetMaxSubtreeCount(parent); i++)
     98        for (int i = 0; i < GetMaximumSubtreeCount(parent); i++)
    11699          foreach (var child in allSymbols) {
    117             SetAllowedChild(parent, child, i);
     100            AddAllowedChildSymbol(parent, child, i);
    118101          }
    119102      }
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/ExternalEvaluationSymbolicExpressionTreeStringConverter.cs

    r5745 r5750  
    3030  [StorableClass]
    3131  public class SymbolicExpressionTreeStringConverter : SymbolicExpressionTreeConverter {
    32     private SymbolicExpressionTreeStringFormatter formatter;
     32    private ExternalEvaluationSymbolicExpressionTreeStringFormatter formatter;
    3333
    3434    [StorableConstructor]
     
    3636    protected SymbolicExpressionTreeStringConverter(SymbolicExpressionTreeStringConverter original, Cloner cloner)
    3737      : base(original, cloner) {
    38       formatter = new SymbolicExpressionTreeStringFormatter();
     38      formatter = new ExternalEvaluationSymbolicExpressionTreeStringFormatter();
    3939      formatter.Indent = original.formatter.Indent;
    4040    }
     
    5454
    5555    private void Initialize() {
    56       formatter = new SymbolicExpressionTreeStringFormatter();
     56      formatter = new ExternalEvaluationSymbolicExpressionTreeStringFormatter();
    5757      formatter.Indent = false;
    5858    }
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/ExternalEvaluationSymbolicExpressionTreeStringFormatter.cs

    r5745 r5750  
    2525using HeuristicLab.Common;
    2626using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     27using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
     28using HeuristicLab.Problems.DataAnalysis.Symbolic;
     29using System;
    2730
    28 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
     31namespace HeuristicLab.Problems.ExternalEvaluation.GP {
    2932
    30   [Item("SymbolicExpressionTreeStringFormatter", "The default string formatter for symbolic expression trees.")]
     33  [Item("ExternalEvaluationSymbolicExpressionTreeStringFormatter", "A string formatter for symbolic expression trees for external evaluation.")]
    3134  [StorableClass]
    32   public class SymbolicExpressionTreeStringFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter {
     35  public class ExternalEvaluationSymbolicExpressionTreeStringFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter {
    3336
    3437    public bool Indent { get; set; }
    3538
    3639    [StorableConstructor]
    37     protected SymbolicExpressionTreeStringFormatter(bool deserializing) : base(deserializing) { }
    38     protected SymbolicExpressionTreeStringFormatter(SymbolicExpressionTreeStringFormatter original, Cloner cloner)
     40    protected ExternalEvaluationSymbolicExpressionTreeStringFormatter(bool deserializing) : base(deserializing) { }
     41    protected ExternalEvaluationSymbolicExpressionTreeStringFormatter(ExternalEvaluationSymbolicExpressionTreeStringFormatter original, Cloner cloner)
    3942      : base(original, cloner) {
    4043      Indent = original.Indent;
    4144    }
    42     public SymbolicExpressionTreeStringFormatter()
     45    public ExternalEvaluationSymbolicExpressionTreeStringFormatter()
    4346      : base() {
    44       Name = "Default String Formatter";
     47      Name = "External Evaluation Symbolic Expression Tree Formatter";
    4548      Indent = true;
    4649    }
    4750
    4851    public string Format(ISymbolicExpressionTree symbolicExpressionTree) {
    49       return FormatRecursively(symbolicExpressionTree.Root, 0);
     52      // skip root and start symbols
     53      return FormatRecursively(symbolicExpressionTree.Root.GetSubtree(0).GetSubtree(0), 0);
    5054    }
    5155
     
    5761      if (node.Subtrees.Count() > 0) {
    5862        // symbol on same line as '('
    59         strBuilder.AppendLine(node.ToString());
     63        if (node.Symbol is Addition) {
     64          strBuilder.AppendLine("+");
     65        } else if (node.Symbol is And) {
     66          strBuilder.AppendLine("&&");
     67        } else if (node.Symbol is Average) {
     68          strBuilder.AppendLine("avg");
     69        } else if (node.Symbol is Cosine) {
     70          strBuilder.AppendLine("cos");
     71        } else if (node.Symbol is Division) {
     72          strBuilder.AppendLine("/");
     73        } else if (node.Symbol is Exponential) {
     74          strBuilder.AppendLine("exp");
     75        } else if (node.Symbol is GreaterThan) {
     76          strBuilder.AppendLine(">");
     77        } else if (node.Symbol is IfThenElse) {
     78          strBuilder.AppendLine("if");
     79        } else if (node.Symbol is LessThan) {
     80          strBuilder.AppendLine("<");
     81        } else if (node.Symbol is Logarithm) {
     82          strBuilder.AppendLine("ln");
     83        } else if (node.Symbol is Multiplication) {
     84          strBuilder.AppendLine("*");
     85        } else if (node.Symbol is Not) {
     86          strBuilder.AppendLine("!");
     87        } else if (node.Symbol is Or) {
     88          strBuilder.AppendLine("||");
     89        } else if (node.Symbol is Sine) {
     90          strBuilder.AppendLine("sin");
     91        } else if (node.Symbol is Subtraction) {
     92          strBuilder.AppendLine("-");
     93        } else if (node.Symbol is Tangent) {
     94          strBuilder.AppendLine("tan");
     95        } else {
     96          throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for external evaluation.");
     97        }
    6098        // each subtree expression on a new line
    6199        // and closing ')' also on new line
     100
    62101        foreach (var subtree in node.Subtrees) {
    63102          strBuilder.AppendLine(FormatRecursively(subtree, indentLength + 2));
     
    66105        strBuilder.Append(")");
    67106      } else {
    68         // symbol in the same line with as '(' and ')'
    69         strBuilder.Append(node.ToString());
    70         strBuilder.Append(")");
     107        if (node is VariableTreeNode) {
     108          var varNode = node as VariableTreeNode;
     109          // symbol in the same line with as '(' and ')'
     110          strBuilder.Append(";" + varNode.VariableName + ";" + varNode.Weight.ToString("E4"));
     111          strBuilder.Append(")");
     112        } else if (node is ConstantTreeNode) {
     113          var constNode = node as ConstantTreeNode;
     114          // symbol in the same line with as '(' and ')'
     115          strBuilder.Append(";" + constNode.Value.ToString("E4"));
     116          strBuilder.Append(")");
     117        } else {
     118          throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for external evaluation.");
     119        }
    71120      }
    72121      return strBuilder.ToString();
     
    74123
    75124    public override IDeepCloneable Clone(Cloner cloner) {
    76       return new SymbolicExpressionTreeStringFormatter(this, cloner);
     125      return new ExternalEvaluationSymbolicExpressionTreeStringFormatter(this, cloner);
    77126    }
    78127  }
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.4/HeuristicLab.Problems.ExternalEvaluation.GP-3.4.csproj

    r5572 r5750  
    108108  <ItemGroup>
    109109    <None Include="HeuristicLabProblemsExternalEvaluationGPPlugin.cs.frame" />
     110    <Compile Include="ExternalEvaluationExpressionGrammar.cs" />
     111    <Compile Include="ExternalEvaluationSymbolicExpressionTreeBinaryConverter.cs" />
     112    <Compile Include="ExternalEvaluationSymbolicExpressionTreeConverter.cs" />
     113    <Compile Include="ExternalEvaluationSymbolicExpressionTreeStringConverter.cs" />
     114    <Compile Include="ExternalEvaluationSymbolicExpressionTreeStringFormatter.cs" />
    110115    <Compile Include="HeuristicLabProblemsExternalEvaluationGPPlugin.cs" />
    111116    <Compile Include="Properties\AssemblyInfo.cs" />
    112117    <None Include="Properties\AssemblyInfo.frame" />
    113     <Compile Include="SymbolicExpressionTreeBinaryConverter.cs" />
    114     <Compile Include="SymbolicExpressionTreeConverter.cs" />
    115     <Compile Include="SymbolicExpressionTreeStringConverter.cs" />
    116118  </ItemGroup>
    117119  <ItemGroup>
     
    147149      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
    148150      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
     151    </ProjectReference>
     152    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Symbolic\3.4\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj">
     153      <Project>{3D28463F-EC96-4D82-AFEE-38BE91A0CA00}</Project>
     154      <Name>HeuristicLab.Problems.DataAnalysis.Symbolic-3.4</Name>
    149155    </ProjectReference>
    150156    <ProjectReference Include="..\..\HeuristicLab.Problems.ExternalEvaluation\3.3\HeuristicLab.Problems.ExternalEvaluation-3.3.csproj">
     
    176182      <Install>true</Install>
    177183    </BootstrapperPackage>
     184  </ItemGroup>
     185  <ItemGroup>
     186    <Content Include="ExternalEvaluationGrammar.txt" />
    178187  </ItemGroup>
    179188  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Note: See TracChangeset for help on using the changeset viewer.