Experiments · E98

Can the energy model itself estimate each alloy's ordering temperature in a few milliseconds?

Withdrawn. It ran in 1–4 ms, but it misses orderings away from 50/50 mixes; a 1.2-second short simulation now clears those.

In the log: The ordering energy from the expansion itself

mixedDate not stated in the log; it was written between the commit of 2026-09-13 08:16 and the first commit that contains it, 2026-09-16 02:04rung 1 · ordering0 predictions · 1 result paragraphEXPERIMENTS.md lines 5706–5802
exp E98 diagram
What E98 did and how it came out, drawn from this record and the files it names (book/assets/diagrams/exp/E98.svg).

Results

EXPERIMENTS.md · line 5742

Outcome. It works well enough to gate, my falsification criterion did not, and the one miss is a composition whose truth straddles the boundary.

The full record

EXPERIMENTS.md · lines 5706–5802

E98 — The ordering energy from the expansion itself

E97 failed because the hull's 401 bcc orderings are all binary, so a ternary solid solution was compared against a competitor worse than its own ground state. The expansion does not have that problem: it gives an energy for any occupation of the lattice at any composition. So the ordered state is built rather than looked up.

For a composition, partition the species into two groups, put one group on the corner sublattice and the other on the body centres in the proportions the composition allows, and evaluate with the expansion. That is the A2 to B2 ordering, the one this system actually makes. Enumerating the partitions - 2^(n-1) - 1 of them - and taking the lowest gives the ordering energy:

dE_ord = E_random - min over partitions of E_ordered

and the mean-field ordering temperature follows from the entropy given up, dS_ord, which for a two-sublattice split is the difference between the random and sublattice-resolved ideal mixing entropies.

This costs cluster vectors, not Monte Carlo, and it covers every composition because it constructs the competitor instead of fetching it.

Predicted:

  1. It ranks the four measured compositions correctly - the thing E97 could not do. This is the whole test; a gate that scrambles a known order is useless.
  2. It overestimates T_od, as mean-field does on bcc, by 10 to 60 per cent. Direction matters more than magnitude for a gate: too high is conservative.
  3. Under 40 ms for compositions of six elements or fewer, which is where the search lives. Twelve elements is 2047 partitions and will be slower; if it is intolerable the enumeration is capped and that is recorded rather than hidden.

Falsified as a gate if the ranking is wrong, in which case rung 0 cannot carry the ordering question at all and it stays at rung 1, with the generator rewarded on a driving force that must then exclude the ordering margin some other way.

Outcome. It works well enough to gate, my falsification criterion did not, and the one miss is a composition whose truth straddles the boundary.

composition dE_ord T_mf T_od measured ratio cost
Ta0.53 Mo0.47 93 1564 1277 +/- 45 1.23 1 ms
Mo0.62 Ta0.38 61 1058 991 +/- 106 1.07 1 ms
Ta0.39 Mo0.34 W0.18 Nb0.08 78 724 844 +/- 138 0.86 4 ms
Mo0.50 Ta0.33 W0.15 56 652 914 +/- 104 0.71 2 ms

Prediction 3 holds and by a wide margin: one to four milliseconds, against forty predicted, because constructing an ordered occupation and taking one cluster vector is cheaper than anything that samples.

Prediction 2 is falsified: the ratios run 0.71 to 1.23, so it does not uniformly overestimate. Mean-field reasoning said it would; it does for the two binaries and not for the ternary and quaternary.

Prediction 1 is falsified and the criterion was mine to get wrong. The two compositions whose order it swaps are 914 +/- 104 and 844 +/- 138 K - a separation of 69 K against uncertainties of 104 and 138. The reference does not order them either. I set a test the data cannot answer and then recorded the estimator as failing it. E82 measured those bars and I quoted them in the same file.

On the test that a gate is actually for, it is 3 of 4, and the miss is Mo0.62Ta0.38, whose measured 991 +/- 106 K straddles the 1000 K boundary it is being asked about. There is no estimator that gets that one right, because the truth does not.

So rung 0 can carry the ordering question after all, at one to four milliseconds, using the expansion that was built for exactly this and no new data. What it cannot do is resolve two compositions seventy kelvin apart - and neither can rung 1.

Deployed. The ladder now asks the whole requirement at rung 0.

forager/ordering.py constructs the ordered competitor from the expansion at any composition, and Verifier.attach_ordering gives it to the screen. The screen reports T_order, whether it falls inside the window, and the ordering advantage in meV/atom so it can be added to a driving force rather than compared with one. The service window is now read from FORAGER_T_LO/FORAGER_T_HI rather than written into the code, because the requirement belongs to whoever is asking, not to this file.

composition drive T_order inside penalty gated
Mo0.62 Ta0.38 -144 1058 no 0 -144
Nb0.50 Ta0.50 -8 0 no 0 -8
Mo0.50 W0.50 -17 195 yes 6 -11
MoNbTaW -115 445 yes 42 -73
MoNbTaVW -53 286 yes 27 -26

Nb-Ta comes back with no ordering tendency at all, which is the right answer for a near-ideal solid solution and the discrimination rung 0 previously lacked. Mo0.62Ta0.38 orders above the window, so it carries no penalty for a transition inside it - but orders_in_window is false for the reason that it is ordered throughout, which makes it a compound and not the solid solution that was asked for. Reporting the temperature rather than a verdict is what lets that distinction survive.

Screen cost 17.8 ms, up from 14.5. 222 tests pass.

A slip worth naming because it is the second time: atoms * (n,) * 3 binds left to right and hands ASE a one-tuple. It surfaces as an IndexError from inside ase.atoms that names nothing. Same bug, same symptom, months apart.

Related entries

Built with PRISMWebsite and visualizations made using Claude