Opened 2 months ago

Last modified 2 months ago

#2977 reviewing feature request

Pearson R2 & Tree Similarity Multiobjective Evaluator

Reported by: bburlacu Owned by: mkommend
Priority: medium Milestone: HeuristicLab 3.3.16
Component: Problems.DataAnalysis.Symbolic.Regression Version: trunk
Keywords: Cc:

Description

The idea behind this multi-objective evaluator is to try to maintain better diversity among the population of solution candidates, helping the algorithm to improve by combining advantageous traits from more diverse parents.

This evaluator works quite well with the NSGA-II.

Change History (5)

comment:1 Changed 2 months ago by bburlacu

  • Status changed from new to accepted
  • Summary changed from New R2 & Tree Similarity Multiobjective Evaluator to Pearson R2 & Tree Similarity Multiobjective Evaluator

comment:2 Changed 2 months ago by bburlacu

  • Component changed from Problems.DataAnalysis.Symbolic to Problems.DataAnalysis.Symbolic.Regression
  • Owner changed from bburlacu to mkommend
  • Status changed from accepted to reviewing

r16499: Implement Pearson R2 & Tree Similarity Evaluator.

comment:3 Changed 2 months ago by gkronber

  • sw is not used (?) and should be removed.
  • creative use of ExecutionContext.Scope.Parent.SubScopes.Where(x => x.Variables.ContainsKey("SymbolicExpressionTree")). Seems likely to break or be incompatible to other algorithms. Maybe you could split evaluation and sim-matrix calculation into an Evaluator and an Analyzer?
  • Can we keep Calculate a static method. Ideally, this would allow to remove the synchronization in Calculate.

comment:4 Changed 2 months ago by bburlacu

creative use of ExecutionContext.Scope.Parent.SubScopes.Where(x => x.Variables.ContainsKey("SymbolicExpressionTree")). Seems likely to break or be incompatible to other algorithms. Maybe you could split evaluation and sim-matrix calculation into an Evaluator and an Analyzer?

I am not quite sure how to achieve that. The analyzer would have to run before the evaluator, on the scope level above the evaluator (ExecutionContext.Parent.Scope) so it cannot be wired as a BeforeExecutionOperator. The evaluator is executed at solution creation and inside the main loop. The only solution I can think of is having the evaluator apply the analyzer but that does not seem like much of an improvement. Any ideas?

comment:5 Changed 2 months ago by gkronber

I thought it could be possible to implement an analyzer which takes all individuals form the population and does some processing for similarity calculation (e.g. linearization, simplification) and then produces an data structure that is written back to the population scope by the analyzer. The evaluator can later retrieve this data structure again. In this case it is necessary to manually you need to add (or enable) the analyzer to make the evaluator work but I think this would be ok.

In the first generation we can probably select randomly (if the analyzer has not been executed before the evaluator)

Last edited 2 months ago by gkronber (previous) (diff)
Note: See TracTickets for help on using tickets.