← Back to the workbench

AI research

Evolved

An AI-assisted algorithm discovery platform for turning code search into a repeatable, auditable experiment.

PythonEvolutionEvaluation

Evolved searches for better algorithms. A researcher brings a problem, some starting code, and a way to test it. Language models propose changes. Evolved runs them, keeps the promising ones, and uses what it finds to guide the next round.

Take circle packing. How much of a square can you fill with circles that neither overlap nor cross its edges? The researcher writes the rules and the evaluator. Evolved tries different programs for finding an arrangement. Separate populations give different ideas room to develop; the current winner need not be the only idea worth keeping.

The search runs within a budget. Isolated workers test the programs, and an archive keeps their scores, ancestry, and the conditions under which they ran. Interrupted runs can resume. When something looks better, there is a history to inspect and a result to try again.

I want a run to leave us with a verified improvement or a useful account of why the search did not find one. I’m developing Evolved first as a research instrument I can trust, then as a shared workspace for lab mates. The researcher chooses the problem and the evaluator. Having the system help choose those is a question for later research.

How it works / Explore the workflow

Inside a search

Each round begins with a program from the archive. A model proposes a change, quick checks filter the candidates, and isolated workers test the survivors. Restate saves progress so a run can resume. The archive keeps different approaches available for the next round.

Follow the middle column from a seeded run through proposal, pre-filter, sandboxed evaluation and the archive. Orange marks checks. The dashed line on the left returns finished slots to the loop so the search keeps a fixed number of evaluations in flight. Open full size ↗

Learnings

Automated search puts pressure on every omission in a test. A person may read the task and supply the missing convention. A search keeps whatever earns a better score. In one hash-function experiment, a candidate left out the operation that kept arithmetic within 32 bits. Python allowed larger integers, and the evaluator rewarded a program that was doing a different job.

That makes the evaluator part of the research. Its assumptions need tests, too. Known reference programs help reveal when a new check has become too strict. Independent checks help reveal when the search has found a weakness in the score. The more candidates we try, the more chances there are to find either kind of mistake.

A promising result deserves time outside the conditions that selected it. I want to inspect the program, compare it with the starting point, and test it where the search has not been looking. Sometimes the improvement survives. Sometimes we learn that a change cannot address the weakness we hoped it would. Both can make the next experiment better, provided we keep enough of the run to understand what happened.

Candidates face checks during search, then the winner faces separate end-of-run checks. The final path audits the strongest candidates outside the search. Dates show when checks were added to the scorer. Open full size ↗
Explore the other projects →