Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/17/11 12:25:30 (13 years ago)
Author:
gkronber
Message:

#1418 moved liner scaling method into symbolic regression model and fixed bug in interactive solution simplifier

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs

    r5722 r5729  
    3333namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
    3434  public abstract partial class InteractiveSymbolicDataAnalysisSolutionSimplifierView : AsynchronousContentView {
    35     private Dictionary<ISymbolicExpressionTreeNode, ConstantTreeNode> replacementNodes;
     35    private Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode> replacementNodes;
    3636    private Dictionary<ISymbolicExpressionTreeNode, double> nodeImpacts;
    3737
    3838    public InteractiveSymbolicDataAnalysisSolutionSimplifierView() {
    3939      InitializeComponent();
    40       this.replacementNodes = new Dictionary<ISymbolicExpressionTreeNode, ConstantTreeNode>();
     40      this.replacementNodes = new Dictionary<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode>();
    4141      this.nodeImpacts = new Dictionary<ISymbolicExpressionTreeNode, double>();
    4242      this.Caption = "Interactive Solution Simplifier";
     
    8181
    8282    private void CalculateReplacementNodesAndNodeImpacts() {
    83       replacementNodes.Clear();
    8483      if (Content != null && Content.Model != null && Content.ProblemData != null) {
    8584        var tree = Content.Model.SymbolicExpressionTree;
    8685        var replacementValues = CalculateReplacementValues(tree);
    8786        foreach (var pair in replacementValues) {
    88           replacementNodes.Add(pair.Key, MakeConstantTreeNode(pair.Value));
     87          if (!(pair.Key is ConstantTreeNode)) {
     88            replacementNodes[pair.Key] = MakeConstantTreeNode(pair.Value);
     89          }
    8990        }
    9091        nodeImpacts = CalculateImpactValues(Content.Model.SymbolicExpressionTree);
     
    9697            var child = parent.GetSubTree(subTreeIndex);
    9798            if (!(child.Symbol is Constant) && nodeImpacts[child].IsAlmost(1.0)) {
    98               ReplaceNodeWithConstant(parent, subTreeIndex);
     99              SwitchNodeWithReplacementNode(parent, subTreeIndex);
    99100            }
    100101          }
     
    126127          ISymbolicExpressionTreeNode subTree = treeNode.GetSubTree(i);
    127128          if (subTree == visualTreeNode.SymbolicExpressionTreeNode) {
    128             ReplaceNodeWithConstant(treeNode, i);
     129            SwitchNodeWithReplacementNode(treeNode, i);
    129130          }
    130131        }
     
    138139    }
    139140
    140     private void ReplaceNodeWithConstant(ISymbolicExpressionTreeNode parent, int subTreeIndex) {
     141    private void SwitchNodeWithReplacementNode(ISymbolicExpressionTreeNode parent, int subTreeIndex) {
    141142      ISymbolicExpressionTreeNode subTree = parent.GetSubTree(subTreeIndex);
    142143      parent.RemoveSubTree(subTreeIndex);
    143       if (replacementNodes.ContainsKey(subTree))
    144         parent.InsertSubTree(subTreeIndex, replacementNodes[subTree]);
    145       else if (subTree is ConstantTreeNode && replacementNodes.ContainsValue((ConstantTreeNode)subTree))
    146         parent.InsertSubTree(subTreeIndex, replacementNodes.Where(v => v.Value == subTree).Single().Key);
    147       else if (!(subTree is ConstantTreeNode))
     144      if (replacementNodes.ContainsKey(subTree)) {
     145        var replacementNode = replacementNodes[subTree];
     146        parent.InsertSubTree(subTreeIndex, replacementNode);
     147        // exchange key and value
     148        replacementNodes.Remove(subTree);
     149        replacementNodes.Add(replacementNode, subTree);
     150      } else {
    148151        throw new InvalidOperationException("Could not find replacement value.");
     152      }
    149153    }
    150154
     
    155159      foreach (ISymbolicExpressionTreeNode treeNode in Content.Model.SymbolicExpressionTree.IterateNodesPostfix()) {
    156160        if (!(treeNode is ConstantTreeNode) && nodeImpacts.ContainsKey(treeNode)) {
    157           double impact = this.nodeImpacts[treeNode];
    158           double replacementValue = this.replacementNodes[treeNode].Value;
     161          double impact = nodeImpacts[treeNode];
    159162          VisualSymbolicExpressionTreeNode visualTree = treeChart.GetVisualSymbolicExpressionTreeNode(treeNode);
    160163
     
    163166          // impact > 0 if new solution is worse
    164167          if (impact < 0.0) {
     168            // min is guaranteed to be < 0
    165169            visualTree.FillColor = Color.FromArgb((int)(impact / min * 255), Color.Red);
     170          } else if (impact.IsAlmost(0.0)) {
     171            visualTree.FillColor = Color.White;
    166172          } else {
     173            // max is guaranteed to be > 0
    167174            visualTree.FillColor = Color.FromArgb((int)(impact / max * 255), Color.Green);
    168175          }
    169176          visualTree.ToolTip += Environment.NewLine + "Node impact: " + impact;
    170           visualTree.ToolTip += Environment.NewLine + "Replacement value: " + replacementValue;
     177          var constantReplacementNode = replacementNodes[treeNode] as ConstantTreeNode;
     178          if (constantReplacementNode != null) {
     179            visualTree.ToolTip += Environment.NewLine + "Replacement value: " + constantReplacementNode.Value;
     180          }
    171181        }
    172182      }
     
    177187    private void PaintCollapsedNodes() {
    178188      foreach (ISymbolicExpressionTreeNode treeNode in Content.Model.SymbolicExpressionTree.IterateNodesPostfix()) {
    179         if (treeNode is ConstantTreeNode && replacementNodes.ContainsValue((ConstantTreeNode)treeNode))
     189        if (treeNode is ConstantTreeNode && replacementNodes.ContainsKey(treeNode))
    180190          this.treeChart.GetVisualSymbolicExpressionTreeNode(treeNode).LineColor = Color.DarkOrange;
    181191        else {
Note: See TracChangeset for help on using the changeset viewer.