2,000 transactions. 60 of them fraudulent. You can only afford to review 100. No one tells the machine what fraud looks like — it writes a rule, tests it, rewrites it, and keeps whatever scores better. A miniature of DeepMind's AlphaEvolve.
function risk(t) {
let score = 0;
if (t.amount > 1000) score += 1;
return score;
}
Each generation it writes 20 variants of this function, scores every one against the whole ledger, and keeps the best — if any of them actually beat the incumbent.
Optimise for:
Download the explainer (PDF, 3 pages) →
Three parts, and that is all a self-improving system ever is: something that proposes a change, something that judges whether it helped, and something that keeps the winner and repeats. Here the proposer is a handful of mutation operators. In AlphaEvolve it is a language model writing the code instead — everything else is the same shape.
All the power sits in the judge. Give this loop an honest measure and it finds real audit tradecraft in under a minute, unprompted. Give it a plausible proxy for the same goal — the second button above, a coverage figure of the kind that appears in real audit reports — and it will maximise that instead, perfectly, while finding almost nothing.
Notice too that it flattens out. The thing doing the improving never improves: the mutation operators at generation 40 are the ones from generation 1. That is precisely why today's self-improving systems plateau instead of running away — and why the ceiling is set by how well we can say what "better" means, not by how clever the machine is.