- Timestamp:
- 01/14/22 12:06:18 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/TreeToAutoDiffTermConverter.cs
r18146 r18197 106 106 out ParametricFunctionGradient func_grad) { 107 107 108 return TryConvertToAutoDiff(tree, makeVariableWeightsVariable, addLinearScalingTerms, Enumerable.Empty<ISymbolicExpressionTreeNode>(), 109 out parameters, out initialParamValues, out func, out func_grad); 110 } 111 112 public static bool TryConvertToAutoDiff(ISymbolicExpressionTree tree, bool makeVariableWeightsVariable, bool addLinearScalingTerms, IEnumerable<ISymbolicExpressionTreeNode> excludedNodes, 113 out List<DataForVariable> parameters, out double[] initialParamValues, 114 out ParametricFunction func, 115 out ParametricFunctionGradient func_grad) { 116 108 117 // use a transformator object which holds the state (variable list, parameter list, ...) for recursive transformation of the tree 109 var transformator = new TreeToAutoDiffTermConverter(makeVariableWeightsVariable, addLinearScalingTerms );118 var transformator = new TreeToAutoDiffTermConverter(makeVariableWeightsVariable, addLinearScalingTerms, excludedNodes); 110 119 AutoDiff.Term term; 111 120 try { … … 134 143 private readonly bool makeVariableWeightsVariable; 135 144 private readonly bool addLinearScalingTerms; 136 137 private TreeToAutoDiffTermConverter(bool makeVariableWeightsVariable, bool addLinearScalingTerms) { 145 private readonly HashSet<ISymbolicExpressionTreeNode> excludedNodes; 146 147 private TreeToAutoDiffTermConverter(bool makeVariableWeightsVariable, bool addLinearScalingTerms, IEnumerable<ISymbolicExpressionTreeNode> excludedNodes) { 138 148 this.makeVariableWeightsVariable = makeVariableWeightsVariable; 139 149 this.addLinearScalingTerms = addLinearScalingTerms; 150 this.excludedNodes = new HashSet<ISymbolicExpressionTreeNode>(excludedNodes); 151 140 152 this.initialParamValues = new List<double>(); 141 153 this.parameters = new Dictionary<DataForVariable, AutoDiff.Variable>(); … … 161 173 var par = FindOrCreateParameter(parameters, varNode.VariableName, varValue); 162 174 163 if (makeVariableWeightsVariable ) {175 if (makeVariableWeightsVariable && !excludedNodes.Contains(node)) { 164 176 initialParamValues.Add(varNode.Weight); 165 177 var w = new AutoDiff.Variable(); … … 176 188 var par = FindOrCreateParameter(parameters, factorVarNode.VariableName, variableValue); 177 189 178 initialParamValues.Add(factorVarNode.GetValue(variableValue)); 179 var wVar = new AutoDiff.Variable(); 180 variables.Add(wVar); 181 182 products.Add(AutoDiff.TermBuilder.Product(wVar, par)); 190 if (makeVariableWeightsVariable && !excludedNodes.Contains(node)) { 191 initialParamValues.Add(factorVarNode.GetValue(variableValue)); 192 var wVar = new AutoDiff.Variable(); 193 variables.Add(wVar); 194 195 products.Add(AutoDiff.TermBuilder.Product(wVar, par)); 196 } else { 197 var weight = factorVarNode.GetValue(variableValue); 198 products.Add(weight * par); 199 } 200 183 201 } 184 202 return AutoDiff.TermBuilder.Sum(products); … … 188 206 var par = FindOrCreateParameter(parameters, varNode.VariableName, string.Empty, varNode.Lag); 189 207 190 if (makeVariableWeightsVariable ) {208 if (makeVariableWeightsVariable && !excludedNodes.Contains(node)) { 191 209 initialParamValues.Add(varNode.Weight); 192 210 var w = new AutoDiff.Variable();
Note: See TracChangeset
for help on using the changeset viewer.