Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/ModelTreeNode.cs @ 16899

Last change on this file since 16899 was 16899, checked in by msemenki, 5 years ago

#2988: New version of class structure.

File size: 3.8 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2019 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using HEAL.Attic;
23using HeuristicLab.Common;
24using HeuristicLab.Core;
25using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
26using HeuristicLab.Random;
27using System.Linq;
28
29namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
30  [StorableType("44B25E73-6C4D-404C-93E5-42B7D2807CF7")]
31  public sealed class TreeModelTreeNode : SymbolicExpressionTreeTerminalNode {
32    public new TreeModel Symbol {
33      get { return (TreeModel)base.Symbol; }
34    }
35    [Storable]
36    ISymbolicExpressionTree tree;
37    public ISymbolicExpressionTree Tree {
38      get { return tree; }
39      set { tree = value; }
40    }
41    int clusterNumer = -10;
42    int treeNumber = 0;
43    public int ClusterNumer {
44      get { return clusterNumer; }
45      set { clusterNumer = value; }
46    }
47    public int TreeNumber {
48      get { return treeNumber; }
49      set { treeNumber = value; }
50    }
51
52    [StorableConstructor]
53    private TreeModelTreeNode(StorableConstructorFlag _) : base(_) {
54      ClusterNumer = -10;
55    }
56
57    private TreeModelTreeNode(TreeModelTreeNode original, Cloner cloner)
58      : base(original, cloner) {
59      tree = (ISymbolicExpressionTree)original.tree.Clone(cloner);
60      ClusterNumer = original.ClusterNumer;
61      TreeNumber = original.TreeNumber;
62    }
63
64    private TreeModelTreeNode() : base() { }
65    public TreeModelTreeNode(TreeModel treeModelSymbol) : base(treeModelSymbol) {
66      ClusterNumer = -10;
67    }
68
69    public override bool HasLocalParameters {
70      get { return true; }
71    }
72    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
73      base.ShakeLocalParameters(random, shakingFactor);
74      var parametricNodes = Tree.IterateNodesPrefix().Where(x => x.HasLocalParameters).ToList();
75      if (parametricNodes.Any()) {
76        var selectedPoint = parametricNodes.SampleRandom(random);
77        if (selectedPoint is VariableTreeNode variableTreeNode) {
78          var symbol = variableTreeNode.Symbol;
79          variableTreeNode.Weight = NormalDistributedRandom.NextDouble(random, symbol.WeightManipulatorMu, symbol.WeightManipulatorSigma);
80        } else {
81          selectedPoint.ShakeLocalParameters(random, shakingFactor);
82        }
83
84      }
85    }
86    public void SetLocalParameters(IRandom random, double shakingFactor) {
87      foreach (var node in Tree.IterateNodesPrefix().Where(x => x.HasLocalParameters)) {
88        if (node is VariableTreeNode variableTreeNode) {
89          var symbol = variableTreeNode.Symbol;
90          variableTreeNode.Weight = NormalDistributedRandom.NextDouble(random, symbol.WeightManipulatorMu, symbol.WeightManipulatorSigma);
91        } else {
92          node.ResetLocalParameters(random);
93        }
94      }
95    }
96    public override IDeepCloneable Clone(Cloner cloner) {
97      return new TreeModelTreeNode(this, cloner);
98    }
99
100    public override string ToString() {
101
102      string s = "model" + " " + TreeNumber.ToString() + "\n " + new InfixExpressionFormatter().Format(tree);
103      return s;
104    }
105  }
106}
107
108
Note: See TracBrowser for help on using the repository browser.