Experiments · E30

Does the fly, searching freely, find better alloys than random sampling at the same cost?

Partly. It reached −471.6 against −456.8 meV/atom (t = 4.6), but a later random baseline on other seeds put that win in doubt.

In the log: The fly forages, and beats sampling at the same cost

mixedDate 2026-09-12, as written in the loggenerator · fly brain0 predictions · 1 result paragraphEXPERIMENTS.md lines 1462–1514
exp E30 diagram
What E30 did and how it came out, drawn from this record and the files it names (book/assets/diagrams/exp/E30.svg).

Results

EXPERIMENTS.md · line 1475

Result.

The full record

EXPERIMENTS.md · lines 1462–1514

E30 — The fly forages, and beats sampling at the same cost

Date 2026-09-12 · Question Can the circuit generate candidates rather than choose from a list, and is it worth the budget? · Provenance forager/forage.py, …/{forage_run,forage_diag,coverage,signcheck}.py

Method. Run and tumble through composition space: hold the heading while the circuit's own score improves, turn when it does not, relocate a walker that has stopped improving. Nothing enumerates candidates, so what comes out was never in a pool. Each round the best of what was found is spent on the environment (128 sites, clusters clear of their images) and the circuit learns from the answer. Budget 60 evaluations, 8 rounds, 10 seeds, against the same budget drawn by Latin hypercube.

Result.

best found, 60 evaluations beat the 4,000-draw sweep
Latin hypercube, same budget -456.8 +/- 6.6 0 of 10
the fly, foraging -471.6 +/- 7.6 4 of 10
4,000-draw sweep, for reference -475.9 - at 66x the cost

A gap of 14.8 meV/atom against a standard error of 3.2 on the difference: t = 4.6. It reaches within 4.3 meV/atom of a sweep costing sixty-six times more, and in four seeds of ten it finds a composition better than anything that sweep contained - which a generator can do and a fixed pool cannot.

It first lost to random sampling, twice, and both faults were in the harness.

  1. The batch was one composition repeated. Spread within the seven picked each round: 0.000, against 0.459 for a random batch. Walkers that follow one judgement end in one place, so the top n by score is one answer wearing n coats, and 56 of the 60 evaluations bought about eight distinct facts. Picks are now required to stand apart, and a stalled walker is relocated rather than left grinding - a fly that loses a plume resumes casting. That alone moved the result from -432.0 to -447.2.
  2. It was asked to steer before its judgement had turned round. The rule begins anti-correlated with the reward - measured at -0.430 after one pass, crossing zero between the second and third, reaching +0.803 by the eighth - and needs roughly four hundred synaptic updates to orient. The loop gave it twenty-four before following where it pointed, so the early rounds climbed away from what they wanted and then trained on the poor sample they had collected. Training is now counted in updates rather than passes, and the circuit checks its own orientation by cross-validation on observations already paid for, sampling at random until it is a useful guide. -447.2 to -471.6.

Coverage was never the problem, which is worth recording because it was the obvious suspect: the walk reaches more of the space than a space-filling design does - 87% of its samples touch a simplex corner against 75%, and a wider per-element range (0.681 against 0.556). Both its best and its median proposal were nonetheless worse, which is what pointed at the steering rather than the exploring.

Caveats. Part of the budget is still spent sampling at random, by the orientation guard, and the two contributions have not been separated. The fly does not beat the 4,000-draw sweep on average, only in four seeds of ten. Sparsity 0.12 was selected on a benchmark of this kind, and its confirmation on an unseen pool is a separate check.

Built with PRISMWebsite and visualizations made using Claude