Free cookie consent management tool by TermsFeed Policy Generator

Opened 5 years ago

Closed 3 years ago

#2985 closed defect (done)

TreeSimplifier simplifies non-constant subtrees to constant

Reported by: lkammere Owned by: gkronber
Priority: medium Milestone: HeuristicLab 3.3.17
Component: Problems.DataAnalysis.Symbolic Version: trunk
Keywords: Cc:

Description

In the tree below, the exponentiation factor becomes very large (about e30 ) while the other factor (5,5606E-016) shrinks this output down into a valid range. However, in the simplifier, this is reduced to a constant, because (5,5606E-016) is too small. The values of Variable X1 are in the range of 0,2 and 1.0

   (Addition
      (5,9323E-002)
      (Multiplication
        (5,5606E-016)
        (Exponential
          (3,5861E+001 X1)
        )
      )
    )

Change History (14)

comment:1 Changed 5 years ago by gkronber

  • Milestone changed from HeuristicLab 3.3.16 to HeuristicLab 3.3.17

comment:2 Changed 3 years ago by gkronber

  • Owner set to gkronber
  • Status changed from new to accepted

comment:3 Changed 3 years ago by gkronber

r17796 add unit tests to reproduce the problem

comment:4 Changed 3 years ago by gkronber

r17797: removed all usages of IsAlmost from TreeSimplifier (+ minor rearrangement of operands in unit test to match the actual output).

comment:5 follow-up: Changed 3 years ago by gkronber

I decided to remove all usages of IsAlmost() from the simplifier to make sure we do not lose relevant parts of the sub-tree on simplification.

The matching is now exact (except for Root and Power which round the exponent in the same way as our interpreters). The drawback is that we may keep sub-trees which are almost irrelevant, resulting in larger trees after simplification.

The change breaks reproduceability. However, it seems the only case where this has an effect is if you load an old experiment where you selected and simplified a SymReg model and you simplify the same model again.

It can lead to completely different results for custom algorithms which simplified trees within the population. However, out-of-the-box no algorithm in HeuristicLab did that so far.

comment:6 Changed 3 years ago by gkronber

  • Owner changed from gkronber to mkommend
  • Status changed from accepted to reviewing

comment:7 Changed 3 years ago by mkommend

  • Version set to trunk

comment:8 Changed 3 years ago by mkommend

r17820: changed behavior of root simplification (rootSymbol(a,0) => double.NaN) and added comments for performed simplifications.

comment:9 follow-up: Changed 3 years ago by mkommend

  • Owner changed from mkommend to gkronber

Reviewed r17797 and everything works as expected.

An error has been present in the simplifier, specifically root(a,0) has been simplified to 1.0. However, the 0-th root is undefined (math-exchange). This has been changed with r17820, which has to be reviewed again.

Last edited 3 years ago by mkommend (previous) (diff)

comment:10 in reply to: ↑ 5 Changed 3 years ago by mkommend

Replying to gkronber:

The change breaks reproduceability. However, it seems the only case where this has an effect is if you load an old experiment where you selected and simplified a SymReg model and you simplify the same model again.

It can lead to completely different results for custom algorithms which simplified trees within the population. However, out-of-the-box no algorithm in HeuristicLab did that so far.

This is completely fine and should not bother us at all.

Last edited 3 years ago by gkronber (previous) (diff)

comment:11 in reply to: ↑ 9 Changed 3 years ago by gkronber

Replying to mkommend:

An error has been present in the simplifier, specifically root(a,0) has been simplified to 1.0. However, the 0-th root is undefined (math-exchange). This has been changed with r17820, which has to be reviewed again.

Well-spotted. Reviewed r17820

comment:12 Changed 3 years ago by gkronber

  • Status changed from reviewing to readytorelease

comment:13 Changed 3 years ago by gkronber

r17862: merged r17797,r17796,r17820 from trunk to stable

comment:14 Changed 3 years ago by gkronber

  • Resolution set to done
  • Status changed from readytorelease to closed
Note: See TracTickets for help on using tickets.