Changeset 18146 for branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/NMSESingleObjectiveConstraintsEvaluator.cs
- Timestamp:
- 12/16/21 14:23:48 (2 years ago)
- Location:
- branches/3136_Structural_GP
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3136_Structural_GP
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/NMSESingleObjectiveConstraintsEvaluator.cs
r18104 r18146 46 46 (IFixedValueParameter<BoolValue>)Parameters[OptimizeParametersParameterName]; 47 47 48 public IFixedValueParameter<IntValue> ConstantOptimizationIterationsParameter =>48 public IFixedValueParameter<IntValue> ParameterOptimizationIterationsParameter => 49 49 (IFixedValueParameter<IntValue>)Parameters[ParameterOptimizationIterationsParameterName]; 50 50 … … 62 62 } 63 63 64 public int ConstantOptimizationIterations {65 get => ConstantOptimizationIterationsParameter.Value.Value;66 set => ConstantOptimizationIterationsParameter.Value.Value = value;64 public int ParameterOptimizationIterations { 65 get => ParameterOptimizationIterationsParameter.Value.Value; 66 set => ParameterOptimizationIterationsParameter.Value.Value = value; 67 67 } 68 68 … … 97 97 public NMSESingleObjectiveConstraintsEvaluator() { 98 98 Parameters.Add(new FixedValueParameter<BoolValue>(OptimizeParametersParameterName, 99 "Define whether optimization of numericparameters is active or not (default: false).", new BoolValue(false)));99 "Define whether optimization of parameters is active or not (default: false).", new BoolValue(false))); 100 100 Parameters.Add(new FixedValueParameter<IntValue>(ParameterOptimizationIterationsParameterName, 101 101 "Define how many parameter optimization steps should be performed (default: 10).", new IntValue(10))); … … 132 132 133 133 private static void CalcLinearScalingTerms( 134 ISymbolicExpressionTree tree, 134 ISymbolicExpressionTree tree, 135 135 IRegressionProblemData problemData, 136 IEnumerable<int> rows, 136 IEnumerable<int> rows, 137 137 ISymbolicDataAnalysisExpressionTreeInterpreter interpreter) { 138 138 var rootNode = new ProgramRootSymbol().CreateTreeNode(); … … 141 141 .GetSubtree(0); //Offset 142 142 var scaling = offset.GetSubtree(0); 143 143 144 144 //Check if tree contains offset and scaling nodes 145 145 if (!(offset.Symbol is Addition) || !(scaling.Symbol is Multiplication)) 146 throw new ArgumentException($"S hape Constraints Evaluationcan only be used with LinearScalingGrammar.");146 throw new ArgumentException($"Scaling can only be used with LinearScalingGrammar."); 147 147 148 148 var t = (ISymbolicExpressionTreeNode)scaling.GetSubtree(0).Clone(); … … 155 155 156 156 var targetValues = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 157 OnlineLinearScalingParameterCalculator.Calculate(estimatedValues, targetValues, out var alpha, out var beta, out var errorState); 157 OnlineLinearScalingParameterCalculator.Calculate(estimatedValues, targetValues, out var alpha, out var beta, 158 out var errorState); 159 158 160 if (errorState == OnlineCalculatorError.None) { 159 //Set alpha and beta to the scaling nodes from iagrammar160 var offsetParameter = offset.GetSubtree(1) as ConstantTreeNode;161 //Set alpha and beta to the scaling nodes from grammar 162 var offsetParameter = offset.GetSubtree(1) as NumberTreeNode; 161 163 offsetParameter.Value = alpha; 162 var scalingParameter = scaling.GetSubtree(1) as ConstantTreeNode;164 var scalingParameter = scaling.GetSubtree(1) as NumberTreeNode; 163 165 scalingParameter.Value = beta; 164 166 } … … 193 195 if (constraintViolations.Any(x => double.IsNaN(x) || double.IsInfinity(x))) 194 196 return 1.0; 195 197 196 198 // hard constraints 197 199 if (!useSoftConstraints) { … … 220 222 221 223 var nmse = Calculate( 222 tree, problemData, rows, 224 tree, problemData, rows, 223 225 SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, 224 EstimationLimitsParameter.ActualValue.Lower, 226 EstimationLimitsParameter.ActualValue.Lower, 225 227 EstimationLimitsParameter.ActualValue.Upper, 226 BoundsEstimator, 227 UseSoftConstraints, 228 BoundsEstimator, 229 UseSoftConstraints, 228 230 PenalityFactor); 229 231 … … 245 247 246 248 if (OptimizeParameters) 247 SymbolicRegression ConstantOptimizationEvaluator.OptimizeConstants(248 interpreter, tree, 249 SymbolicRegressionParameterOptimizationEvaluator.OptimizeParameters( 250 interpreter, tree, 249 251 problemData, rows, 250 252 applyLinearScaling: false, // Tree already contains scaling terms 251 ConstantOptimizationIterations,253 ParameterOptimizationIterations, 252 254 updateVariableWeights: true, 253 lowerEstimationLimit, 255 lowerEstimationLimit, 254 256 upperEstimationLimit); 255 257 256 258 else if (applyLinearScaling) // extra scaling terms, which are included in tree 257 CalcLinearScalingTerms(tree, problemData, rows, interpreter); 258 259 CalcLinearScalingTerms(tree, problemData, rows, interpreter); 260 259 261 return Calculate( 260 262 tree, problemData, 261 rows, interpreter, 262 lowerEstimationLimit, 263 upperEstimationLimit, 263 rows, interpreter, 264 lowerEstimationLimit, 265 upperEstimationLimit, 264 266 BoundsEstimator, 265 267 UseSoftConstraints,
Note: See TracChangeset
for help on using the changeset viewer.