Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs @ 10650

Last change on this file since 10650 was 10650, checked in by bburlacu, 10 years ago

#1772: Added new SymbolicDataAnalysisGenealogyView and added support for the tracing of building blocks (finding the constituent ancestral elements of a selected subtree).

  • Property svn:mergeinfo set to (toggle deleted branches)
    /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.csmergedeligible
    /branches/Benchmarking/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs6917-7005
    /branches/CloningRefactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs4656-4721
    /branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5471-5473
    /branches/DataAnalysis SolutionEnsembles/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5815-6180
    /branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs4458-4459,​4462,​4464
    /branches/ExportSymbolicDataAnalysisSolutions/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs9511-9585
    /branches/GP.Grammar.Editor/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs6284-6795
    /branches/GP.Symbols (TimeLag, Diff, Integral)/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5060
    /branches/HLScript/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs10331-10358
    /branches/HeuristicLab.DataAnalysis.Symbolic.LinearInterpreter/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs9271-9826
    /branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs7098-8789
    /branches/HeuristicLab.TreeSimplifier/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs8388-8942
    /branches/LogResidualEvaluator/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs10202-10483
    /branches/NET40/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5138-5162
    /branches/ParallelEngine/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5175-5192
    /branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs7568-7810
    /branches/QAPAlgorithms/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs6350-6627
    /branches/Restructure trunk solution/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs6828
    /branches/SpectralKernelForGaussianProcesses/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs10204-10479
    /branches/SuccessProgressAnalysis/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5370-5682
    /branches/Trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs6829-6865
    /branches/VNS/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5594-5752
    /branches/histogram/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs5959-6341
    /stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Matching/SymbolicExpressionTreeNodeSimilarityComparer.cs10032-10033
File size: 3.0 KB
Line 
1using HeuristicLab.Common;
2using HeuristicLab.Core;
3using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
4using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
5
6namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
7  [Item("SymbolicExpressionTreeNodeSimilarityComparer", "A comparison operator that checks node equality based on different similarity measures.")]
8  [StorableClass]
9  public class SymbolicExpressionTreeNodeSimilarityComparer : Item, ISymbolicExpressionTreeNodeSimilarityComparer {
10    [StorableConstructor]
11    private SymbolicExpressionTreeNodeSimilarityComparer(bool deserializing) : base(deserializing) { }
12    private SymbolicExpressionTreeNodeSimilarityComparer(SymbolicExpressionTreeNodeSimilarityComparer original, Cloner cloner)
13      : base(original, cloner) {
14      matchConstantValues = original.matchConstantValues;
15      matchVariableNames = original.matchVariableNames;
16      matchVariableWeights = original.matchVariableWeights;
17    }
18    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicExpressionTreeNodeSimilarityComparer(this, cloner); }
19
20    // more flexible matching criteria
21    [Storable]
22    private bool matchConstantValues;
23    public bool MatchConstantValues {
24      get { return matchConstantValues; }
25      set { matchConstantValues = value; }
26    }
27
28    [Storable]
29    private bool matchVariableNames;
30    public bool MatchVariableNames {
31      get { return matchVariableNames; }
32      set { matchVariableNames = value; }
33    }
34
35    [Storable]
36    private bool matchVariableWeights;
37    public bool MatchVariableWeights {
38      get { return matchVariableWeights; }
39      set { matchVariableWeights = value; }
40    }
41
42    [StorableHook(HookType.AfterDeserialization)]
43    private void AfterDeserialization() {
44    }
45
46    public SymbolicExpressionTreeNodeSimilarityComparer() {
47      matchConstantValues = true;
48      matchVariableNames = true;
49      matchVariableWeights = true;
50    }
51
52    public int GetHashCode(ISymbolicExpressionTreeNode n) {
53      return n.ToString().ToLower().GetHashCode();
54    }
55
56    public bool Equals(ISymbolicExpressionTreeNode a, ISymbolicExpressionTreeNode b) {
57      if (!(a is SymbolicExpressionTreeTerminalNode))
58        // if a and b are non terminal nodes, check equality of symbol names
59        return !(b is SymbolicExpressionTreeTerminalNode) && a.Symbol.Name.Equals(b.Symbol.Name);
60      var va = a as VariableTreeNode;
61      if (va != null) {
62        var vb = b as VariableTreeNode;
63        if (vb == null) return false;
64
65        return (!MatchVariableNames || va.VariableName.Equals(vb.VariableName)) && (!MatchVariableWeights || va.Weight.Equals(vb.Weight));
66      }
67      var ca = a as ConstantTreeNode;
68      if (ca != null) {
69        var cb = b as ConstantTreeNode;
70        if (cb == null) return false;
71        return (!MatchConstantValues || ca.Value.Equals(cb.Value));
72      }
73      return false;
74    }
75  }
76}
Note: See TracBrowser for help on using the repository browser.