Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/15/14 13:50:37 (10 years ago)
Author:
bburlacu
Message:

#1772: Merged trunk changes.

Location:
branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding

  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/ArchitectureManipulators/MultiSymbolicExpressionTreeArchitectureManipulator.cs

    r9456 r10456  
    106106      Operators = checkedItemList.AsReadOnly();
    107107      Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
     108
     109      SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
    108110    }
    109111
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Formatters/SymbolicExpressionTreeLatexFormatter.cs

    r10302 r10456  
    1 using System.Collections.Generic;
     1using System;
     2using System.Collections.Generic;
     3using System.Globalization;
    24using System.Linq;
    35using System.Text;
     
    810  [Item("LaTeX/PDF Formatter", "Formatter for symbolic expression trees for use with latex.")]
    911  public class SymbolicExpressionTreeLatexFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter {
    10     private readonly static Dictionary<string, string> symbolNameMap = new Dictionary<string, string>
     12    private readonly static Dictionary<string, string> SymbolNamesMap = new Dictionary<string, string>
    1113    {
    1214      {"ProgramRootSymbol", "Prog"},
    13       {"StartSymbol","RPB"}
     15      {"StartSymbol","RPB"},
     16      {"Addition", "$+$"},
     17      {"Subtraction", "$-$"},
     18      {"Multiplication", "$\\times$"},
     19      {"Division", "$\\div$"}
    1420    };
    1521    private readonly ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode> layoutEngine;
    1622    private readonly SymbolicExpressionTreeLayoutAdapter layoutAdapter;
    1723
    18 
    1924    public SymbolicExpressionTreeLatexFormatter() {
    2025      layoutEngine = new ReingoldTilfordLayoutEngine<ISymbolicExpressionTreeNode>();
     26      layoutAdapter = new SymbolicExpressionTreeLayoutAdapter();
    2127    }
    2228
     
    3743      foreach (var ln in layoutNodes)
    3844        layoutEngine.AddNode(ln.Content, ln);
     45      layoutEngine.CalculateLayout();
    3946      var nodeCoordinates = layoutEngine.GetNodeCoordinates();
    4047      var sb = new StringBuilder();
    41       sb.AppendLine("\\begin{figure}");
    42       sb.AppendLine("\\begin{tikzpicture}");
     48      var nl = Environment.NewLine;
     49      sb.Append("\\documentclass[class=minimal,border=0pt]{standalone}" + nl +
     50                "\\usepackage{tikz}" + nl +
     51                "\\begin{document}" + nl +
     52                "\\begin{tikzpicture}" + nl +
     53                "\\def\\ws{1}" + nl +
     54                "\\def\\hs{0.7}" + nl);
    4355
    44       foreach (var node in symbolicExpressionTree.IterateNodesBreadth()) {
     56      const double ws = 1.0, hs = 0.7; // some scaling factors useful for fine-tuning document appearance before latex compilation
     57      var nodes = symbolicExpressionTree.IterateNodesBreadth().ToList();
     58      var nodeIndices = new Dictionary<ISymbolicExpressionTreeNode, int>();
     59      for (int i = 0; i < nodes.Count; ++i) {
     60        var node = nodes[i];
     61        nodeIndices.Add(node, i);
    4562        var symbolName = node.Symbol.Name;
    46         var nodeName = symbolNameMap.ContainsKey(symbolName) ? symbolNameMap[symbolName] : symbolName;
     63        var nodeName = SymbolNamesMap.ContainsKey(symbolName) ? SymbolNamesMap[symbolName] : symbolName;
    4764        var coord = nodeCoordinates[node];
    4865
    49         sb.AppendLine(string.Format("\\draw node ({0},{1}) {{{2}}};", coord.X, coord.Y, nodeName));
     66        sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "\\node ({0}) at (\\ws*{1},\\hs*{2}) {{{3}}};", i, ws * coord.X, -hs * coord.Y, EscapeLatexString(nodeName)));
    5067      }
    5168
    52       sb.AppendLine("\\end{figure}");
    53       sb.AppendLine("\\end{tikzpicture}");
     69      for (int i = 0; i < nodes.Count; ++i) {
     70        foreach (var s in nodes[i].Subtrees) {
     71          sb.AppendLine(string.Format(CultureInfo.InvariantCulture, "\\draw ({0}) -- ({1});", i, nodeIndices[s]));
     72        }
     73      }
     74
     75      sb.AppendLine("\\end{tikzpicture}" + nl + "\\end{document}" + nl);
    5476
    5577      return sb.ToString();
    5678    }
     79
     80    private static string EscapeLatexString(string s) {
     81      return s.Replace("\\", "\\\\").Replace("{", "\\{").Replace("}", "\\}").Replace("_", "\\_");
     82    }
    5783  }
    5884}
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/LayoutEngines/SymbolicExpressionTreeLayoutAdapter.cs

    r10269 r10456  
    2828  public class SymbolicExpressionTreeLayoutAdapter : ILayoutAdapter<ISymbolicExpressionTreeNode> {
    2929    // default conversion function between ISymbolicExpressionTreeNode and ILayoutNode<ISymbolicExpressionTree>
    30     ILayoutNode<ISymbolicExpressionTreeNode> defaultConvert(ISymbolicExpressionTreeNode node) {
     30    static ILayoutNode<ISymbolicExpressionTreeNode> DefaultConvert(ISymbolicExpressionTreeNode node) {
    3131      var layoutNode = new LayoutNode<ISymbolicExpressionTreeNode> { Content = node };
    3232      layoutNode.Ancestor = layoutNode;
     
    4040    // return an enumerable containing all the layout nodes
    4141    public IEnumerable<ILayoutNode<ISymbolicExpressionTreeNode>> Convert(ISymbolicExpressionTreeNode root, Func<ISymbolicExpressionTreeNode, ILayoutNode<ISymbolicExpressionTreeNode>> convertFunc = null) {
    42       var rootLayoutNode = convertFunc == null ? defaultConvert(root) : convertFunc(root);
     42      var rootLayoutNode = convertFunc == null ? DefaultConvert(root) : convertFunc(root);
    4343      rootLayoutNode.Ancestor = rootLayoutNode;
    4444
     
    6363      for (int i = 0; i < layoutNode.Content.SubtreeCount; ++i) {
    6464        var subtree = layoutNode.Content.GetSubtree(i);
    65         var childLayoutNode = convertFunc == null ? defaultConvert(subtree) : convertFunc(subtree);
     65        var childLayoutNode = convertFunc == null ? DefaultConvert(subtree) : convertFunc(subtree);
    6666        childLayoutNode.Parent = layoutNode;
    6767        childLayoutNode.Number = i;
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs

    r9456 r10456  
    8383      Operators = checkedItemList.AsReadOnly();
    8484      Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
     85
     86      SelectedOperatorParameter.ActualName = "SelectedManipulationOperator";
    8587    }
    8688
Note: See TracChangeset for help on using the changeset viewer.