Changeset 3710 for trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionSolutionLinearScaler.cs
- Timestamp:
- 05/07/10 21:10:46 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/Analyzers/SymbolicRegressionSolutionLinearScaler.cs
r3683 r3710 47 47 private const string BetaParameterName = "Beta"; 48 48 49 public ScopeTreeLookupParameter<SymbolicExpressionTree> SymbolicExpressionTreeParameter {50 get { return ( ScopeTreeLookupParameter<SymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }49 public ILookupParameter<SymbolicExpressionTree> SymbolicExpressionTreeParameter { 50 get { return (ILookupParameter<SymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; } 51 51 } 52 public ScopeTreeLookupParameter<SymbolicExpressionTree> ScaledSymbolicExpressionTreeParameter {53 get { return ( ScopeTreeLookupParameter<SymbolicExpressionTree>)Parameters[ScaledSymbolicExpressionTreeParameterName]; }52 public ILookupParameter<SymbolicExpressionTree> ScaledSymbolicExpressionTreeParameter { 53 get { return (ILookupParameter<SymbolicExpressionTree>)Parameters[ScaledSymbolicExpressionTreeParameterName]; } 54 54 } 55 public ScopeTreeLookupParameter<DoubleValue> AlphaParameter {56 get { return ( ScopeTreeLookupParameter<DoubleValue>)Parameters[AlphaParameterName]; }55 public ILookupParameter<DoubleValue> AlphaParameter { 56 get { return (ILookupParameter<DoubleValue>)Parameters[AlphaParameterName]; } 57 57 } 58 public ScopeTreeLookupParameter<DoubleValue> BetaParameter {59 get { return ( ScopeTreeLookupParameter<DoubleValue>)Parameters[BetaParameterName]; }58 public ILookupParameter<DoubleValue> BetaParameter { 59 get { return (ILookupParameter<DoubleValue>)Parameters[BetaParameterName]; } 60 60 } 61 61 62 62 public SymbolicRegressionSolutionLinearScaler() 63 63 : base() { 64 Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to transform."));65 Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(ScaledSymbolicExpressionTreeParameterName, "The resulting symbolic expression trees after transformation."));66 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(AlphaParameterName, "Alpha parameter for linear transformation."));67 Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(BetaParameterName, "Beta parameter for linear transformation."));64 Parameters.Add(new LookupParameter<SymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression trees to transform.")); 65 Parameters.Add(new LookupParameter<SymbolicExpressionTree>(ScaledSymbolicExpressionTreeParameterName, "The resulting symbolic expression trees after transformation.")); 66 Parameters.Add(new LookupParameter<DoubleValue>(AlphaParameterName, "Alpha parameter for linear transformation.")); 67 Parameters.Add(new LookupParameter<DoubleValue>(BetaParameterName, "Beta parameter for linear transformation.")); 68 68 } 69 69 70 70 public override IOperation Apply() { 71 ItemArray<SymbolicExpressionTree> trees = SymbolicExpressionTreeParameter.ActualValue; 72 ItemArray<DoubleValue> alphas = AlphaParameter.ActualValue; 73 ItemArray<DoubleValue> betas = BetaParameter.ActualValue; 74 ItemArray<SymbolicExpressionTree> scaledTrees = new ItemArray<SymbolicExpressionTree>(trees.Length); 75 for (int i = 0; i < trees.Length; i++) { 76 var mainBranch = trees[i].Root.SubTrees[0].SubTrees[0]; 77 var scaledMainBranch = MakeSum(MakeProduct(betas[i].Value, mainBranch), alphas[i].Value); 71 SymbolicExpressionTree tree = SymbolicExpressionTreeParameter.ActualValue; 72 DoubleValue alpha = AlphaParameter.ActualValue; 73 DoubleValue beta = BetaParameter.ActualValue; 74 var mainBranch = tree.Root.SubTrees[0].SubTrees[0]; 75 var scaledMainBranch = MakeSum(MakeProduct(beta.Value, mainBranch), alpha.Value); 78 76 79 // remove the main branch before cloning to prevent cloning of sub-trees 80 trees[i].Root.SubTrees[0].RemoveSubTree(0); 81 var scaledTree = (SymbolicExpressionTree)trees[i].Clone(); 82 // insert main branch into the original tree again 83 trees[i].Root.SubTrees[0].InsertSubTree(0, mainBranch); 84 // insert the scaled main branch into the cloned tree 85 scaledTree.Root.SubTrees[0].InsertSubTree(0, scaledMainBranch); 86 scaledTrees[i] = scaledTree; 87 } 88 ScaledSymbolicExpressionTreeParameter.ActualValue = scaledTrees; 77 // remove the main branch before cloning to prevent cloning of sub-trees 78 tree.Root.SubTrees[0].RemoveSubTree(0); 79 var scaledTree = (SymbolicExpressionTree)tree.Clone(); 80 // insert main branch into the original tree again 81 tree.Root.SubTrees[0].InsertSubTree(0, mainBranch); 82 // insert the scaled main branch into the cloned tree 83 scaledTree.Root.SubTrees[0].InsertSubTree(0, scaledMainBranch); 84 ScaledSymbolicExpressionTreeParameter.ActualValue = scaledTree; 89 85 return base.Apply(); 90 86 }
Note: See TracChangeset
for help on using the changeset viewer.