Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/19/20 14:14:11 (4 years ago)
Author:
dpiringe
Message:

#3076:

  • changed SymbolicRegressionSingleObjectiveMetaModelAnalyzer to calculate the average quality of an solution for all problems
    • average: because we need to include outlier
  • some architectural changes
  • added new (but empty) meta model analyzer for multi objective -> SymbolicRegressionMultiObjectiveMetaModelAnalyzer
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionMetaModelAnalyzer.cs

    r17771 r17776  
    2222    private const string BaseProblemParameterName = "Base Problem";
    2323    private const string AnalyzeXIterationParameterName = "Analyze X Iteration";
    24     private const string BestMetaModelParameterName = "Best Meta Model";
    2524    #endregion
    2625
     
    3029      (IFixedValueParameter<ItemList<T>>)Parameters[ProblemsToAnalyzeParameterName];
    3130
    32     public IValueParameter<SymbolicRegressionSingleObjectiveProblem> BaseProblemParameter =>
    33       (IValueParameter<SymbolicRegressionSingleObjectiveProblem>)Parameters[BaseProblemParameterName];
     31    public IValueParameter<T> BaseProblemParameter =>
     32      (IValueParameter<T>)Parameters[BaseProblemParameterName];
    3433
    3534    public IFixedValueParameter<IntValue> AnalyzeXIterationParameter =>
    3635      (IFixedValueParameter<IntValue>)Parameters[AnalyzeXIterationParameterName];
    37 
    38     public IResultParameter<ISymbolicRegressionSolution> BestMetaModelParameter =>
    39       (IResultParameter<ISymbolicRegressionSolution>)Parameters[BestMetaModelParameterName];
    4036    #endregion
    4137
    4238    public static int Iterations { get; set; } = 1;
    4339
     40    #region constructors and cloning
    4441    protected SymbolicRegressionMetaModelAnalyzer(SymbolicRegressionMetaModelAnalyzer<T> original, Cloner cloner) :
    4542      base(original, cloner) { }
     
    5552      Parameters.Add(new FixedValueParameter<IntValue>(AnalyzeXIterationParameterName,
    5653        "After every X iteration, the analyzer will perform its step.", new IntValue(1)));
    57       Parameters.Add(new ResultParameter<ISymbolicRegressionSolution>(BestMetaModelParameterName,
    58         "The best meta model found."));
    5954    }
    6055
     
    7267        Parameters.Add(new FixedValueParameter<IntValue>(AnalyzeXIterationParameterName,
    7368          "After every X iteration, the analyzer will perform its step.", new IntValue(1)));
     69    }
    7470
    75       if (!Parameters.ContainsKey(BestMetaModelParameterName))
    76         Parameters.Add(new ResultParameter<ISymbolicRegressionSolution>(BestMetaModelParameterName,
    77           "The best meta model found."));
    78     }
     71    #endregion
    7972
    8073    public override void InitializeState() {
     
    8982
    9083    //protected abstract bool TryFittingSolution(ISymbolicExpressionTree tree, T problem, out SymbolicRegressionSolution solution);
    91     protected abstract void PerformApply(T problem, string targetVariable);
     84    protected abstract void PerformApply(T baseProblem, IEnumerable<T> problems, string targetVariable);
    9285
    9386    public override IOperation Apply() {
     
    9891      if (Iterations >= AnalyzeXIterationParameter.Value.Value) {
    9992        Iterations = 1;
    100         string targetVariable = BaseProblemParameter.Value.ProblemData.TargetVariable;
     93        var baseProblem = BaseProblemParameter.Value;
     94        var problems = ProblemsToAnalyzeParameter.Value;
     95        var targetVariable = BaseProblemParameter.Value.ProblemData.TargetVariable;
    10196
    102         foreach (var problem in ProblemsToAnalyzeParameter.Value) {
    103           if (problem.ProblemData.TargetVariable == targetVariable)
    104             PerformApply(problem, targetVariable);
    105           else
    106             throw new ArgumentException($"The target variable of the problem '{problem.Name}' does not match with the base problem.");
    107         }
    108        
    109         /*
    110           * besser als eigenes Problem (abgeleitet von SymbolicRegressionProblem?), vlt auch als "CompoundProblem" (mehrere SymReg Problems in einen)?
    111           * eigenes ProblemData?
    112           * oder im Analyzer einfach anstatt Dataset -> ProblemData?
    113           */
     97        // error handling
     98        var badProblems = problems.Where(x => x.ProblemData.TargetVariable != targetVariable);
     99        IList<Exception> errors = new List<Exception>();
     100        foreach (var problem in badProblems)
     101          errors.Add(new ArgumentException($"The target variable of the problem '{problem.Name}' does not match with the base problem."));
     102        if (badProblems.Any())
     103          throw new AggregateException(errors);
     104
     105        // apply
     106        PerformApply(baseProblem, problems, targetVariable);
    114107      } else {
    115108        Iterations++;
Note: See TracChangeset for help on using the changeset viewer.