Changeset 17733 for branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionSingleObjectiveConstraintConstOptNmseEvaluator.cs
- Timestamp:
- 08/27/20 13:01:18 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/Evaluators/SymbolicRegressionSingleObjectiveConstraintConstOptNmseEvaluator.cs
r17660 r17733 15 15 private const string UseConstOptParameterName = "Use ConstOpt"; 16 16 private const string ConstOptIterationsParameterName = "ConstOpt Iterations"; 17 private const string PenalityMultiplierParameterName = "ConstraintsPenalityMultiplier"; 17 18 18 19 public IFixedValueParameter<BoolValue> UseConstOptParamerter => … … 21 22 public IFixedValueParameter<IntValue> ConstOpterIterationsParameter => 22 23 (IFixedValueParameter<IntValue>) Parameters[ConstOptIterationsParameterName]; 24 25 public ILookupParameter<DoubleValue> PenalityMultiplierParameter => 26 (ILookupParameter<DoubleValue>)Parameters[PenalityMultiplierParameterName]; 23 27 24 28 public bool UseConstOpt { … … 48 52 Parameters.Add(new FixedValueParameter<IntValue>(ConstOptIterationsParameterName, 49 53 "Define how many constOpt iterations should be performed.", new IntValue(10))); 54 Parameters.Add(new LookupParameter<DoubleValue>(PenalityMultiplierParameterName, 55 "Lookup parameter for the penality multiplier.", "PenalityMultiplier")); 50 56 } 51 57 … … 63 69 "Define how many constOpt iterations should be performed.", new IntValue(10))); 64 70 } 71 72 if (!Parameters.ContainsKey(PenalityMultiplierParameterName)) 73 Parameters.Add(new LookupParameter<DoubleValue>(PenalityMultiplierParameterName, 74 "Lookup parameter for the penality multiplier.", "PenalityMultiplier")); 65 75 } 66 76 … … 81 91 estimationLimits.Lower, estimationLimits.Upper); 82 92 93 var penalityMultiplier = PenalityMultiplierParameter.ActualValue?.Value ?? 1.0; 94 83 95 var quality = Calculate(interpreter, solution, estimationLimits.Lower, estimationLimits.Upper, problemData, rows, 84 applyLinearScaling );96 applyLinearScaling, penalityMultiplier); 85 97 QualityParameter.ActualValue = new DoubleValue(quality); 98 99 86 100 return base.InstrumentedApply(); 87 101 } … … 91 105 ISymbolicExpressionTree solution, double lowerEstimationLimit, 92 106 double upperEstimationLimit, 93 IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling) { 107 IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling, 108 double penalityMultiplier) { 94 109 var estimatedValues = 95 110 interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows); … … 98 113 var variableRanges = problemData.VariableRanges.GetReadonlyDictionary(); 99 114 100 if (!SymbolicRegressionConstraintAnalyzer.ConstraintsSatisfied(constraints, variableRanges, solution))101 return 1.0;102 103 115 var boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit); 104 116 var nmse = OnlineNormalizedMeanSquaredErrorCalculator.Calculate(targetValues, boundedEstimatedValues, out var errorState); 117 if (!SymbolicRegressionConstraintAnalyzer.ConstraintsSatisfied(constraints, variableRanges, solution, out double error)) 118 { 119 if (double.IsNaN(error) || double.IsInfinity(error)) 120 nmse += penalityMultiplier * 1.0; 121 else 122 nmse += penalityMultiplier * error; 123 nmse = Math.Min(1.0, nmse); 124 } 125 105 126 if (errorState != OnlineCalculatorError.None) nmse = 1.0; 106 127 … … 115 136 ApplyLinearScalingParameter.ExecutionContext = context; 116 137 138 var penalityMultiplier = PenalityMultiplierParameter.ActualValue?.Value ?? 1.0; 139 117 140 var nmse = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, 118 141 EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, 119 142 problemData, rows, 120 ApplyLinearScalingParameter.ActualValue.Value); 143 ApplyLinearScalingParameter.ActualValue.Value, 144 penalityMultiplier); 121 145 122 146 SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
Note: See TracChangeset
for help on using the changeset viewer.