Free cookie consent management tool by TermsFeed Policy Generator

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

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

#2988: Add first version of GP for Evolvment models of models.

File size: 4.0 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.Collections.Generic;
28
29
30namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
31  [StorableType("38C37AED-5B9D-488E-8785-D8FF541D9B4C")]
32  public sealed class TreeModelTreeNode : SymbolicExpressionTreeTerminalNode {
33    public new TreeModel Symbol {
34      get { return (TreeModel)base.Symbol; }
35    }
36    [Storable]
37    ISymbolicExpressionTree tree;
38    public ISymbolicExpressionTree Tree {
39      get { return tree; }
40      set { tree = value; }
41    }
42    int clusterNumer = -10;
43    int treeNumber = 0;
44    public int ClusterNumer {
45      get { return clusterNumer; }
46      set { clusterNumer = value; }
47    }
48    public int TreeNumber {
49      get { return treeNumber; }
50      set { treeNumber = value; }
51    }
52
53    [StorableConstructor]
54    private TreeModelTreeNode(StorableConstructorFlag _) : base(_) {
55      ClusterNumer = -10;
56    }
57
58    private TreeModelTreeNode(TreeModelTreeNode original, Cloner cloner)
59      : base(original, cloner) {
60      tree = original.tree;
61      ClusterNumer = original.ClusterNumer;
62      TreeNumber = original.TreeNumber;
63    }
64
65    private TreeModelTreeNode() : base() { }
66    public TreeModelTreeNode(TreeModel treeModelSymbol) : base(treeModelSymbol) {
67      ClusterNumer = -10;
68    }
69
70    public override bool HasLocalParameters {
71      get { return true; }
72    }
73    //public override void ResetLocalParameters(IRandom random, List<ISymbolicExpressionTree> modelSet, List<List<int>> map, List<int> cLusterNumber) {
74    //  base.ResetLocalParameters(random);
75    //  if (ClusterNumer < 0) {
76    //    //Tree = map.NewModelForInizializtion(ClusterNumer, random);
77    //    var selectedNodelNumber = random.Next(modelSet.Count);
78    //    ClusterNumer = cLusterNumber[selectedNodelNumber];
79    //    TreeNumber = selectedNodelNumber;
80    //    Tree = (ISymbolicExpressionTree)modelSet[selectedNodelNumber].Clone();
81    //  } else {
82    //    //New Model For Mutation Adding
83    //    var selectedNodelNumber = random.Next(map[ClusterNumer].Count);
84    //    TreeNumber = selectedNodelNumber;
85    //    Tree = (ISymbolicExpressionTree)modelSet[map[ClusterNumer][selectedNodelNumber]].Clone();
86    //  }
87
88    //}
89
90    public override void ShakeLocalParameters(IRandom random, double shakingFactor) {
91      base.ShakeLocalParameters(random, shakingFactor);
92      List<ISymbolicExpressionTreeNode> parametricNodes = new List<ISymbolicExpressionTreeNode>();
93      Tree.Root.ForEachNodePostfix(n => {
94        if (n.HasLocalParameters) parametricNodes.Add(n);
95      });
96      if (parametricNodes.Count > 0) {
97        var selectedPoint = parametricNodes.SampleRandom(random);
98        selectedPoint.ShakeLocalParameters(random, shakingFactor);
99      }
100    }
101
102    public override IDeepCloneable Clone(Cloner cloner) {
103      return new TreeModelTreeNode(this, cloner);
104    }
105
106    public override string ToString() {
107
108      string s = "model" +" " +TreeNumber.ToString()+"\n " + new InfixExpressionFormatter().Format(tree);
109      return s;
110    }
111  }
112}
113
114
Note: See TracBrowser for help on using the repository browser.