Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/27/20 13:01:18 (4 years ago)
Author:
dpiringe
Message:

#3076

  • modified SymbolicRegressionConstraintAnalyzer to calculate an error (as out parameter)
    • added an ILookupParameter to write a penality multiplier into the scope
  • changed a lot of evaluators to match the changed analyzer method
  • changed SymbolicRegressionSingleObjectiveConstraintConstOptNmseEvaluator to use a rising penality (instead of setting an unsatisfied solution to 1.0)
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  
    1515    private const string UseConstOptParameterName = "Use ConstOpt";
    1616    private const string ConstOptIterationsParameterName = "ConstOpt Iterations";
     17    private const string PenalityMultiplierParameterName = "ConstraintsPenalityMultiplier";
    1718
    1819    public IFixedValueParameter<BoolValue> UseConstOptParamerter =>
     
    2122    public IFixedValueParameter<IntValue> ConstOpterIterationsParameter =>
    2223      (IFixedValueParameter<IntValue>) Parameters[ConstOptIterationsParameterName];
     24
     25    public ILookupParameter<DoubleValue> PenalityMultiplierParameter =>
     26      (ILookupParameter<DoubleValue>)Parameters[PenalityMultiplierParameterName];
    2327
    2428    public bool UseConstOpt {
     
    4852      Parameters.Add(new FixedValueParameter<IntValue>(ConstOptIterationsParameterName,
    4953        "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"));
    5056    }
    5157
     
    6369          "Define how many constOpt iterations should be performed.", new IntValue(10)));
    6470      }
     71
     72      if (!Parameters.ContainsKey(PenalityMultiplierParameterName))
     73        Parameters.Add(new LookupParameter<DoubleValue>(PenalityMultiplierParameterName,
     74          "Lookup parameter for the penality multiplier.", "PenalityMultiplier"));
    6575    }
    6676
     
    8191          estimationLimits.Lower, estimationLimits.Upper);
    8292
     93      var penalityMultiplier = PenalityMultiplierParameter.ActualValue?.Value ?? 1.0;
     94
    8395      var quality = Calculate(interpreter, solution, estimationLimits.Lower, estimationLimits.Upper, problemData, rows,
    84         applyLinearScaling);
     96        applyLinearScaling, penalityMultiplier);
    8597      QualityParameter.ActualValue = new DoubleValue(quality);
     98
     99
    86100      return base.InstrumentedApply();
    87101    }
     
    91105      ISymbolicExpressionTree solution, double lowerEstimationLimit,
    92106      double upperEstimationLimit,
    93       IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling) {
     107      IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling,
     108      double penalityMultiplier) {
    94109      var estimatedValues =
    95110        interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows);
     
    98113      var variableRanges = problemData.VariableRanges.GetReadonlyDictionary();
    99114
    100       if (!SymbolicRegressionConstraintAnalyzer.ConstraintsSatisfied(constraints, variableRanges, solution))
    101         return 1.0;
    102 
    103115      var boundedEstimatedValues = estimatedValues.LimitToRange(lowerEstimationLimit, upperEstimationLimit);
    104116      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
    105126      if (errorState != OnlineCalculatorError.None) nmse = 1.0;
    106127
     
    115136      ApplyLinearScalingParameter.ExecutionContext                  = context;
    116137
     138      var penalityMultiplier = PenalityMultiplierParameter.ActualValue?.Value ?? 1.0;
     139
    117140      var nmse = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree,
    118141        EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper,
    119142        problemData, rows,
    120         ApplyLinearScalingParameter.ActualValue.Value);
     143        ApplyLinearScalingParameter.ActualValue.Value,
     144        penalityMultiplier);
    121145
    122146      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
Note: See TracChangeset for help on using the changeset viewer.