Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/17 12:17:13 (7 years ago)
Author:
gkronber
Message:

#2650 infix formatter also produces factor variable weights, infix parser supports reading of factor variable weights

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs

    r14351 r14761  
    6060
    6161    private void FormatRecursively(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
    62       if (node.SubtreeCount > 1) {
     62      if(node.SubtreeCount > 1) {
    6363        var token = GetToken(node.Symbol);
    64         if (token == "+" || token == "-" || token == "OR" || token == "XOR") {
     64        if(token == "+" || token == "-" || token == "OR" || token == "XOR") {
    6565          strBuilder.Append("(");
    6666          FormatRecursively(node.Subtrees.First(), strBuilder);
    6767
    68           foreach (var subtree in node.Subtrees.Skip(1)) {
     68          foreach(var subtree in node.Subtrees.Skip(1)) {
    6969            strBuilder.Append(" ").Append(token).Append(" ");
    7070            FormatRecursively(subtree, strBuilder);
     
    7272          strBuilder.Append(")");
    7373
    74         } else if (token == "*" || token == "/" || token == "AND") {
     74        } else if(token == "*" || token == "/" || token == "AND") {
    7575          strBuilder.Append("(");
    7676          FormatRecursively(node.Subtrees.First(), strBuilder);
    7777
    78           foreach (var subtree in node.Subtrees.Skip(1)) {
     78          foreach(var subtree in node.Subtrees.Skip(1)) {
    7979            strBuilder.Append(" ").Append(token).Append(" ");
    8080            FormatRecursively(subtree, strBuilder);
     
    8585          strBuilder.Append(token).Append("(");
    8686          FormatRecursively(node.Subtrees.First(), strBuilder);
    87           foreach (var subtree in node.Subtrees.Skip(1)) {
     87          foreach(var subtree in node.Subtrees.Skip(1)) {
    8888            strBuilder.Append(", ");
    8989            FormatRecursively(subtree, strBuilder);
     
    9191          strBuilder.Append(")");
    9292        }
    93       } else if (node.SubtreeCount == 1) {
     93      } else if(node.SubtreeCount == 1) {
    9494        var token = GetToken(node.Symbol);
    95         if (token == "-" || token == "NOT") {
     95        if(token == "-" || token == "NOT") {
    9696          strBuilder.Append("(").Append(token).Append("(");
    9797          FormatRecursively(node.GetSubtree(0), strBuilder);
    9898          strBuilder.Append("))");
    99         } else if (token == "/") {
     99        } else if(token == "/") {
    100100          strBuilder.Append("1/");
    101101          FormatRecursively(node.GetSubtree(0), strBuilder);
    102         } else if (token == "+" || token == "*") {
     102        } else if(token == "+" || token == "*") {
    103103          FormatRecursively(node.GetSubtree(0), strBuilder);
    104104        } else {
     
    110110      } else {
    111111        // no subtrees
    112         if (node.Symbol is LaggedVariable) {
     112        if(node.Symbol is LaggedVariable) {
    113113          var varNode = node as LaggedVariableTreeNode;
    114           if (!varNode.Weight.IsAlmost(1.0)) {
     114          if(!varNode.Weight.IsAlmost(1.0)) {
    115115            strBuilder.Append("(");
    116116            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", varNode.Weight);
     
    118118          }
    119119          strBuilder.Append("LAG(");
    120           if (varNode.VariableName.Contains("'")) {
     120          if(varNode.VariableName.Contains("'")) {
    121121            strBuilder.AppendFormat("\"{0}\"", varNode.VariableName);
    122122          } else {
     
    126126            .AppendFormat(CultureInfo.InvariantCulture, "{0}", varNode.Lag)
    127127            .Append(")");
    128         } else if (node.Symbol is Variable) {
     128        } else if(node.Symbol is Variable) {
    129129          var varNode = node as VariableTreeNode;
    130           if (!varNode.Weight.IsAlmost(1.0)) {
     130          if(!varNode.Weight.IsAlmost(1.0)) {
    131131            strBuilder.Append("(");
    132132            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", varNode.Weight);
    133133            strBuilder.Append("*");
    134134          }
    135           if (varNode.VariableName.Contains("'")) {
     135          if(varNode.VariableName.Contains("'")) {
    136136            strBuilder.AppendFormat("\"{0}\"", varNode.VariableName);
    137137          } else {
    138138            strBuilder.AppendFormat("'{0}'", varNode.VariableName);
    139139          }
    140           if (!varNode.Weight.IsAlmost(1.0)) {
     140          if(!varNode.Weight.IsAlmost(1.0)) {
    141141            strBuilder.Append(")");
    142142          }
    143         } else if (node.Symbol is FactorVariable) {
     143        } else if(node.Symbol is FactorVariable) {
    144144          var factorNode = node as FactorVariableTreeNode;
    145           if (factorNode.VariableName.Contains("'")) {
     145          if(factorNode.VariableName.Contains("'")) {
    146146            strBuilder.AppendFormat("\"{0}\"", factorNode.VariableName);
    147147          } else {
    148148            strBuilder.AppendFormat("'{0}'", factorNode.VariableName);
    149149          }
    150         } else if (node.Symbol is BinaryFactorVariable) {
     150          strBuilder.AppendFormat("[{0}]",
     151            string.Join(", ", factorNode.Weights.Select(w => w.ToString(CultureInfo.InvariantCulture))));
     152        } else if(node.Symbol is BinaryFactorVariable) {
    151153          var factorNode = node as BinaryFactorVariableTreeNode;
    152           if (!factorNode.Weight.IsAlmost(1.0)) {
     154          if(!factorNode.Weight.IsAlmost(1.0)) {
    153155            strBuilder.Append("(");
    154156            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", factorNode.Weight);
    155157            strBuilder.Append("*");
    156158          }
    157           if (factorNode.VariableName.Contains("'")) {
     159          if(factorNode.VariableName.Contains("'")) {
    158160            strBuilder.AppendFormat("\"{0}={1}\"", factorNode.VariableName, factorNode.VariableValue);
    159161          } else {
    160162            strBuilder.AppendFormat("'{0}={1}'", factorNode.VariableName, factorNode.VariableValue);
    161163          }
    162           if (!factorNode.Weight.IsAlmost(1.0)) {
     164          if(!factorNode.Weight.IsAlmost(1.0)) {
    163165            strBuilder.Append(")");
    164166          }
    165167
    166         } else if (node.Symbol is Constant) {
     168        } else if(node.Symbol is Constant) {
    167169          var constNode = node as ConstantTreeNode;
    168           if (constNode.Value >= 0.0)
     170          if(constNode.Value >= 0.0)
    169171            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", constNode.Value);
    170172          else
     
    176178    private string GetToken(ISymbol symbol) {
    177179      var tok = InfixExpressionParser.knownSymbols.GetBySecond(symbol).SingleOrDefault();
    178       if (tok == null)
     180      if(tok == null)
    179181        throw new ArgumentException(string.Format("Unknown symbol {0} found.", symbol.Name));
    180182      return tok;
Note: See TracChangeset for help on using the changeset viewer.