Every Ufinq individual is already a local optimum
Standard genetic programming evolves raw candidates and lets selection do all the work. Ufinq does the opposite: every candidate is refined to a local optimum before it joins the gene pool. That single inversion explains an unusually large fraction of the system’s behaviour.
In a standard genetic-programming setup, each candidate produced by mutation or crossover is dropped straight into the population. Selection pressure is the only mechanism by which structure improves: bad candidates die, good ones survive, and the average fitness of the population rises generation by generation.
Ufinq inverts that contract. Every candidate — whether produced by mutation, crossover, an initialisation strategy, or any specialised search strategy — passes through a refinement pipeline before it is allowed into the gene pool. The pipeline is not optional and not occasional; it runs on every individual, every generation.
What the pipeline does
The refinement pipeline has five stages, each of which leaves the candidate at least no worse than it found it:
- Verification. Structural invariants on the computation graph are checked. Malformed candidates are rejected before they consume any further compute.
- Simplification. Hundreds of declarative rules in the simplification rule DSL normalise the expression. An e-graph rewriter then runs equality saturation to find simplifications that no fixed rule order would catch.
- Optimisation. Every numeric constant in the candidate is tuned against the data using research-grade optimisers — CMA-ES, L-BFGS, Nelder-Mead, Coordinate Descent.
- Normalisation. Equivalent expressions are folded into a canonical form. This is what lets structural diversity gates work: two candidates that compute the same thing are recognised as the same.
- Validation. The refined candidate must demonstrate value to the population — it must not be a duplicate, must satisfy diversity constraints, and must produce a finite score on the training data.
Why this matters
Three consequences fall out of the inversion. First, the population is far smaller than in a comparable raw-GP setup, because every individual carries far more information per slot. Second, structural diversity becomes meaningful: when every candidate is in canonical form, two distinct slots represent two distinct hypotheses, not two random spellings of the same hypothesis. Third, selection pressure can be much sharper without collapsing the population, because the gene pool is already a curated set of local optima rather than a noisy cloud of half-formed candidates.
The cost is that every generation does substantially more work per individual. The trade is: pay this cost once, before selection, and reap a population whose members are individually meaningful. Most of the algorithmic decisions that follow — dual diversity preservation, multi-objective ranking, the asymmetric AHISTER branching pattern — only make sense if you have already paid this cost.
