Add a GP crossover operator that builds offspring by composing two parent programs with a binary function:
child(x) = f(lhs(x), rhs(x))
For symbolic regression, f could be +, -, *, protected division, min or max.
Instead of swapping genes, the operator should copy active exons from both parents into the child, remap D_ADDRESS references and add a final root gene:
copy lhs exons
copy rhs exons with relocated addresses
out = f(lhs_root, rhs_root)
This is semantically meaningful and less destructive than ordinary crossover because both parents remain coherent subprograms. It also fits the exon-based SLP representation well.
Main risk: bloat. The operator should be subject to the fixed SLP capacity or an active-size budget. If both parent exon graphs plus the new root do not fit, it should fall back to an existing crossover or otherwise fail safely.
Possible crossover name: binary_composition.
Suggested use: occasional operator, e.g. 10-20% of crossover events, not the default.
Add a GP crossover operator that builds offspring by composing two parent programs with a binary function:
For symbolic regression,
fcould be+,-,*, protected division,minormax.Instead of swapping genes, the operator should copy active exons from both parents into the child, remap
D_ADDRESSreferences and add a final root gene:This is semantically meaningful and less destructive than ordinary crossover because both parents remain coherent subprograms. It also fits the exon-based SLP representation well.
Main risk: bloat. The operator should be subject to the fixed SLP capacity or an active-size budget. If both parent exon graphs plus the new root do not fit, it should fall back to an existing crossover or otherwise fail safely.
Possible crossover name:
binary_composition.Suggested use: occasional operator, e.g. 10-20% of crossover events, not the default.