Changeset 17776 for branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionMetaModelAnalyzer.cs
- Timestamp:
- 10/19/20 14:14:11 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3076_IA_evaluators_analyzers/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SymbolicRegressionMetaModelAnalyzer.cs
r17771 r17776 22 22 private const string BaseProblemParameterName = "Base Problem"; 23 23 private const string AnalyzeXIterationParameterName = "Analyze X Iteration"; 24 private const string BestMetaModelParameterName = "Best Meta Model";25 24 #endregion 26 25 … … 30 29 (IFixedValueParameter<ItemList<T>>)Parameters[ProblemsToAnalyzeParameterName]; 31 30 32 public IValueParameter< SymbolicRegressionSingleObjectiveProblem> BaseProblemParameter =>33 (IValueParameter< SymbolicRegressionSingleObjectiveProblem>)Parameters[BaseProblemParameterName];31 public IValueParameter<T> BaseProblemParameter => 32 (IValueParameter<T>)Parameters[BaseProblemParameterName]; 34 33 35 34 public IFixedValueParameter<IntValue> AnalyzeXIterationParameter => 36 35 (IFixedValueParameter<IntValue>)Parameters[AnalyzeXIterationParameterName]; 37 38 public IResultParameter<ISymbolicRegressionSolution> BestMetaModelParameter =>39 (IResultParameter<ISymbolicRegressionSolution>)Parameters[BestMetaModelParameterName];40 36 #endregion 41 37 42 38 public static int Iterations { get; set; } = 1; 43 39 40 #region constructors and cloning 44 41 protected SymbolicRegressionMetaModelAnalyzer(SymbolicRegressionMetaModelAnalyzer<T> original, Cloner cloner) : 45 42 base(original, cloner) { } … … 55 52 Parameters.Add(new FixedValueParameter<IntValue>(AnalyzeXIterationParameterName, 56 53 "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."));59 54 } 60 55 … … 72 67 Parameters.Add(new FixedValueParameter<IntValue>(AnalyzeXIterationParameterName, 73 68 "After every X iteration, the analyzer will perform its step.", new IntValue(1))); 69 } 74 70 75 if (!Parameters.ContainsKey(BestMetaModelParameterName)) 76 Parameters.Add(new ResultParameter<ISymbolicRegressionSolution>(BestMetaModelParameterName, 77 "The best meta model found.")); 78 } 71 #endregion 79 72 80 73 public override void InitializeState() { … … 89 82 90 83 //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); 92 85 93 86 public override IOperation Apply() { … … 98 91 if (Iterations >= AnalyzeXIterationParameter.Value.Value) { 99 92 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; 101 96 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); 114 107 } else { 115 108 Iterations++;
Note: See TracChangeset
for help on using the changeset viewer.