Skip to content

Review ODEGenProg#2

Open
DouweDeVestele wants to merge 2 commits intoMMichaelVdV:ODEGenProgfrom
DouweDeVestele:review_ODEGenProg
Open

Review ODEGenProg#2
DouweDeVestele wants to merge 2 commits intoMMichaelVdV:ODEGenProgfrom
DouweDeVestele:review_ODEGenProg

Conversation

@DouweDeVestele
Copy link
Copy Markdown

Interesting!
Nice didactive notebook with a lot of examples.
I experimented a bit with different populations for the first example and a different number of iterations, and experienced that if exp(x) is not in the original population, the approximation does not converge to the analytical solution, maybe it's just bad luck.
I only found some small typo's in the notebook and documentation.
It would be easy if there was some general fitness function, like

function fitness_ODE(tree::RuleNode, grammar::Grammar, bounds::Tuple,functions, conditions)

Where for example functions could be [a,b,c ...] for the ODE a + by(x) + cy'(x) + ... = 0 and
conditions [(o,p),(t,u)] for y(o) = p and y'(t) = u .
but that's maybe to complex with the differentiations in the fitness functions.

@MMichaelVdV
Copy link
Copy Markdown
Owner

MMichaelVdV commented Jan 7, 2021

Interesting!
Nice didactive notebook with a lot of examples.
I experimented a bit with different populations for the first example and a different number of iterations, and experienced that if exp(x) is not in the original population, the approximation does not converge to the analytical solution, maybe it's just bad luck.
I only found some small typo's in the notebook and documentation.
It would be easy if there was some general fitness function, like

function fitness_ODE(tree::RuleNode, grammar::Grammar, bounds::Tuple,functions, conditions)

Where for example functions could be [a,b,c ...] for the ODE a + b_y(x) + c_y'(x) + ... = 0 and
conditions [(o,p),(t,u)] for y(o) = p and y'(t) = u .
but that's maybe to complex with the differentiations in the fitness functions.

@DouweDeVestele Thanks! I think you are correct and I have been thinking about this yesterday myself. If exp(x) is not in the original population there is no way to approximate it more correctly with linear combinations of the functions that are in the grammar than a simple linear approximation (and if it is in the starting population you have the correct solution right away, so maybe a more complex example would be better). This is because the mutation and crossover operators only work by reshuffling existing nodes (i.e. functions) that are already in the starting population. I guess a way around this would be to make sure that at least every basic function is in the starting population. A general fitness function would indeed make sense and I have been thinking about this but it is really hard to generalize this in practice.

MichielStock pushed a commit that referenced this pull request Jan 25, 2021
MichielStock pushed a commit that referenced this pull request Jan 25, 2021
MichielStock pushed a commit that referenced this pull request Jan 25, 2021
MichielStock pushed a commit that referenced this pull request Jan 25, 2021
MichielStock pushed a commit that referenced this pull request Jan 25, 2021
Review Polygon by Kirsten
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants