Let CSP Be Your ANCHOR: Adaptive Crystal Search over Frozen Structure Priors
Organizations: Department of Energy Conversion and Storage, Technical University of Denmark · Department of Mathematics and Computer Science, University of Southern Denmark
Abstract
De novo crystal generation (DNG) models decide where to search in composition space and how to generate structures with one set of weights. We argue that discovery is better served by separating the two. A crystal structure prediction (CSP) model is a physical prior that should be improved by likelihood training, while rewards, including novelty measured against the search's own history, should act on a search over compositions. We introduce ANCHOR, a GRPO composition policy trained with multi-objective rewards around a frozen CSP model, and continuous adaptive novelty (CAN), a graded novelty score against known structures and a growing discovery history. Using the frozen CSP model as a fixed ruler under one evaluator, we test where adaptation should act. Replacing DNG compositions with ANCHOR's policy on the same CSP backbone raises MSUN from 11.4% to 47.6% and SUN from 1.1% to 22.1% at 99.9% formula uniqueness. Fine-tuning DNG models directly on the same rewards instead moves their composition marginal without raising their on-hull fraction. We show that KL-regularized fine-tuning of a DNG model can only reweight chemistry the pretrained model already supports by a bounded factor, while unregularized DNG fine-tunes move toward known or less stable chemistry. Even a stability-only reward routed into ANCHOR's CSP backbone roughly halves SUN relative to the frozen backbone, whereas likelihood training on structures found during search can improve a CSP backbone. Under MatterGen's evaluation pipeline, ANCHOR raises state-of-the-art MSUN from 29.2% to 41.3%, transfers without retraining to two further CSP backbones, and reaches 47.1% after distillation into Crystalite-CSP. As with any model optimised against a potential, its on-hull rate depends on that potential.
Figures & tables
| Configuration | Valid | Unique | Novel | Meta | Stable | MSUN | SUN | MP-20 |
|---|---|---|---|---|---|---|---|---|
| Full method | 97.5 ±0.4 | 99.9 ±0.1 | 97.3 ±0.5 | 47.7 ±2.0 | 22.2 ±1.2 | 47.6 ±2.1 | 22.1 ±1.2 | 0 ±0 |
| – count bonus | 96.4 ±0.2 | 100.0 ±0.0 | 96.4 ±0.3 | 32.8 ±1.5 | 12.6 ±0.4 | 32.8 ±1.5 | 12.6 ±0.4 | 0 ±0 |
| – sub-group mask | 96.6 ±0.3 | 99.9 ±0.1 | 96.5 ±0.1 | 43.5 ±2.5 | 11.6 ±0.8 | 43.4 ±2.4 | 11.6 ±0.9 | 0 ±0 |
| – adaptive nov. | 97.0 ±0.1 | 99.8 ±0.1 | 96.9 ±0.0 | 39.7 ±2.1 | 14.7 ±2.0 | 39.7 ±2.1 | 14.7 ±2.0 | 0 ±0 |
| adaptive nov. only | 97.7 ±0.6 | 100.0 ±0.0 | 97.6 ±0.6 | 52.0 ±0.4 | 16.3 ±2.0 | 52.0 ±0.5 | 16.3 ±2.0 | 0 ±0 |
| count bonus only | 96.0 ±0.6 | 100.0 ±0.0 | 96.0 ±0.6 | 41.3 ±1.4 | 12.4 ±0.8 | 41.3 ±1.4 | 12.4 ±0.8 | 0 ±0 |
| Configuration | Valid | Unique | Novel | Meta | Stable | MSUN | SUN | MP-20 |
|---|---|---|---|---|---|---|---|---|
| Untrained composition sources (frozen KLDM-CSP) | ||||||||
| Random formulas | 9.8 ±0.4 | 100.0 ±0.0 | 8.3 ±0.6 | 2.4 ±0.5 | 0.4 ±0.1 | 1.5 ±0.4 | 0.2 ±0.0 | 17.5 ±3.5 |
| Enumerated charge-neutral | 68.9 ±1.6 | 100.0 ±0.0 | 68.2 ±1.3 | 9.4 ±0.3 | 1.2 ±0.1 | 8.8 ±0.0 | 1.2 ±0.1 | 9.5 ±4.9 |
| DNG and reward fine-tuned DNG (ours) | ||||||||
| Crystalite-DNG | 47.0 ±2.7 | 98.8 ±0.1 | 31.9 ±1.8 | 26.2 ±2.1 | 2.8 ±0.3 | 14.0 ±0.7 | 1.5 ±0.4 | 165.7 ±17.2 |
| CSP | 48.9 ±2.6 | 98.8 ±0.1 | 33.3 ±1.4 | 28.0 ±3.0 | 2.9 ±0.6 | 15.0 ±1.0 | 1.7 ±0.3 | 167.3 ±16.6 |
| Model | Unique | Novel | Meta | Stable | RMSD | MSUN | SUN | |
|---|---|---|---|---|---|---|---|---|
| DNG baselines | ||||||||
| MatterGen-MP a | – | – | 47.1 | – | 0.20 | 0.15 | 25.8 | – |
| KLDM- (D) a | – | – | 59.2 | – | 0.16 | 0.28 | 18.5 | – |
| Crystalite b | 94.7 | 56.6 | 64.5 | – | 0.15 | 0.27 | 24.3 | – |
| MatterGen+REPA c | 99.7 | 63.5 | 66.2 | – | 0.12 | 0.11 | 29.2 | – |
| Untrained composition sources (frozen KLDM-CSP) | ||||||||
Appendix figures & tables21 assets
Supplementary material from the paper’s appendix.
Appendix
| Symbol | Type | Meaning |
| Composition action space | ||
| set | discrete chemical space searched by the policy | |
| set | element vocabulary; | |
| set | admissible element counts, ; | |
| integer | number of distinct elements in an action, | |
| the distinct chosen elements | ||
| Block | Elements |
|---|---|
| Period 1–3 | H, Li, Be, B, C, N, O, F, Na, Mg, Al, Si, P, S, Cl |
| Period 4 | K, Ca, Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br |
| Period 5 | Rb, Sr, Y, Zr, Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I |
| Period 6 | Cs, Ba, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg, Tl, Pb, Bi |
| Lanthanides | La, Ce, Pr, Nd, Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu |
| Actinides | Ac, Th, Pa, U, Np, Pu |
| Symbol / parameter | Value | Role |
|---|---|---|
| 7 Å | RDF distance cutoff | |
| 80 | RDF histogram resolution | |
| 10 | kNN neighbourhood size | |
| 0.75 | Bootstrap for first off-MP-20 formula | |
| 20 | FIFO cap per reduced formula | |
| 10th pct. calibration | Minimum RBF bandwidth |
| Parameter | Value | Note |
| Action space | ||
| 84 | Element vocabulary (Appendix D.1 ) | |
| Distinct elements per action | ||
| 20 | Max atoms per cell | |
| max atoms / element | 12 | |
| Policy network | ||
| Experiment | Configuration | Step | Structures | |
|---|---|---|---|---|
| Base-model sweep | / 1M | 16 | 7950 | |
| / 5M | 16 | 7800 | ||
| / 1M | 32 | 3850 | ||
| / 5M | 32 | 3850 | ||
| / 1M | 64 | 2000 | ||
| / 5M | 64 | 1750 |
| Configuration | Valid | Unique | Novel | Meta | Stable | MSUN | SUN | MP-20 | |
| ANCHOR , inference-time backbone | |||||||||
| ANCHOR KLDM-CSP | 1000 | 97.9 | 100.0 | 97.9 | 38.5 | 18.1 | 38.5 | 18.1 | 0 |
| ANCHOR Crystalite-CSP | 1000 | 94.1 | 100.0 | 94.1 | 37.0 | 13.7 | 37.0 | 13.7 | 0 |
| ANCHOR OMatG-CSP | 998 | 98.2 | 100.0 | 98.2 | 37.9 | 14.9 | 37.9 | 14.9 | 0 |
| ANCHOR trained with LeMat validity | |||||||||
| KLDM backbone | 1000 | 5.6 | 100.0 | 5.6 | 0.7 | 0.0 | 0.7 | 0.0 | 1 |
| Configuration | Valid | Unique | Novel | Meta | Stable | MSUN | SUN | MP-20 | |
| ANCHOR , inference-time backbone | |||||||||
| ANCHOR KLDM-CSP | 1000 | 72.9 | 100.0 | 72.9 | 25.0 | 9.4 | 25.0 | 9.4 | 0 |
| ANCHOR Crystalite-CSP | 1000 | 72.7 | 100.0 | 72.7 | 26.0 | 8.4 | 26.0 | 8.4 | 0 |
| ANCHOR OMatG-CSP | 998 | 72.8 | 100.0 | 72.8 | 26.2 | 7.9 | 26.2 | 7.9 | 0 |
| ANCHOR trained with LeMat validity | |||||||||
| KLDM backbone | 1000 | 98.3 | 100.0 | 97.5 | 9.2 | 0.0 | 8.7 | 0.0 | 10 |
| 100-step budget | 400-step budget | ||||
|---|---|---|---|---|---|
| Structures | Relaxation | Conv. (%) | s/struct | Conv. (%) | s/struct |
| ANCHOR KLDM-CSP | positions | 16.4 | – | 98.8 | – |
| cell free | 6.5 | 7.18 | 99.4 | 14.00 | |
| ANCHOR Crystalite-CSP | positions | 27.7 | 5.47 | 99.5 | 8.00 |
| cell free | 9.4 | 7.08 | 99.5 | 12.86 | |
| Crystalite-DNG | positions | 90.2 | 2.10 | 100.0 | 2.28 |
| Configuration | Unique | Novel | Meta | Stable | MSUN | SUN | RMSD | ||
|---|---|---|---|---|---|---|---|---|---|
| ANCHOR , inference-time backbone | |||||||||
| ANCHOR KLDM-CSP | 993 | 100.0 | 100.0 | 42.3 | 17.1 | 42.3 | 17.1 | 0.133 | 1.40 |
| ANCHOR Crystalite-CSP | 993 | 100.0 | 100.0 | 42.8 | 14.5 | 42.8 | 14.5 | 0.138 | 1.27 |
| ANCHOR OMatG-CSP | 991 | 100.0 | 100.0 | 43.2 | 17.3 | 43.2 | 17.3 | 0.134 | 1.28 |
| ANCHOR trained with LeMat validity | |||||||||
| KLDM backbone | 998 | 100.0 | 97.2 | 22.0 | 0.3 | 19.4 | 0.0 | 0.189 | 0.60 |
| Model | Unique | Novel | Meta | RMSD | MSUN | |
|---|---|---|---|---|---|---|
| Published DNG baselines | ||||||
| MatterGen-MP a | – | – | 47.1 | 0.20 | 0.15 | 25.8 |
| DiffCSP a | – | – | 41.3 | 0.19 | 0.41 | 20.1 |
| KLDM- (C) a | – | – | 38.6 | 0.27 | 0.37 | 16.7 |
| KLDM- (C-AB) a | – | – | 49.8 | 0.19 | 0.30 | 17.9 |
| KLDM- (D) a | – | – | 59.2 | 0.16 | 0.28 | 18.5 |
| Configuration | Valid | Unique | Novel | Meta | Stable | MSUN | SUN | ||
|---|---|---|---|---|---|---|---|---|---|
| ANCHOR , inference-time backbone | |||||||||
| ANCHOR KLDM-CSP | 1000 | 73.0 | 73.0 | 73.0 | 2.9 | 0.0 | 0.20 | 2.9 | 0.0 |
| ANCHOR Crystalite-CSP | 1000 | 73.0 | 73.0 | 73.0 | 3.1 | 0.0 | 0.20 | 3.1 | 0.0 |
| ANCHOR OMatG-CSP | 998 | 72.9 | 72.9 | 72.9 | 3.1 | 0.0 | 0.20 | 3.1 | 0.0 |
| ANCHOR trained with LeMat validity | |||||||||
| KLDM backbone | 1000 | 99.4 | 99.4 | 96.2 | 28.1 | 0.1 | 0.17 | 26.0 | 0.0 |
| Configuration | Valid | Unique | Novel | Meta | Stable | MSUN | SUN | ||
|---|---|---|---|---|---|---|---|---|---|
| ANCHOR , inference-time backbone | |||||||||
| ANCHOR KLDM-CSP | 1000 | 73.0 | 73.0 | 73.0 | 8.2 | 0.4 | 0.170 | 7.8 | 0.4 |
| ANCHOR Crystalite-CSP | 1000 | 73.0 | 73.0 | 73.0 | 8.6 | 0.8 | 0.172 | 7.8 | 0.8 |
| ANCHOR OMatG-CSP | 998 | 72.9 | 72.9 | 72.9 | 9.1 | 0.6 | 0.170 | 8.5 | 0.6 |
| ANCHOR trained with LeMat validity | |||||||||
| KLDM backbone | 1000 | 99.4 | 99.4 | 98.9 | 34.0 | 1.1 | 0.154 | 32.5 | 1.0 |
| Internal gate | LeMat gate, our pipeline | LeMat-GenBench | |||||||
| Configuration | Valid | SUN | MSUN | Valid | SUN | MSUN | Valid | SUN | MSUN |
| ANCHOR trained against the internal validity gate | |||||||||
| ANCHOR KLDM-CSP | 97.9 | 23.2 | 49.9 | 72.9 | 13.6 | 34.1 | 73.0 | 0.4 | 7.8 |
| ANCHOR trained against the LeMat validity gate | |||||||||
| KLDM backbone | 5.6 | 0.0 | 2.1 | 98.3 | 0.1 | 28.1 | 99.4 | 1.0 | 32.5 |
| DNG reference | |||||||||
| Rank | Config | Valid% | Unique% | SUN% | MSUN% |
|---|---|---|---|---|---|
| 1 | G32 / 1M | 97.9 | 100.0 | 18.1 | 38.5 |
| 2 | G16 / 5M | 94.3 | 100.0 | 8.6 | 20.8 |
| 3 | G16 / 1M | 93.6 | 100.0 | 6.0 | 13.5 |
| 4 | G64 / 1M | 96.5 | 100.0 | 3.5 | 13.4 |
| 5 | G32 / 5M | 96.0 | 100.0 | 3.9 | 11.5 |
| 6 | G64 / 5M | 95.4 | 100.0 | 1.5 | 8.5 |
| Rank | Config | Valid% | Unique% | SUN% | MSUN% |
|---|---|---|---|---|---|
| 1 | G32 / 1M | 87.0 | 99.8 | 7.2 | 22.1 |
| 2 | G16 / 5M | 88.0 | 99.7 | 3.8 | 11.7 |
| 3 | G16 / 1M | 85.1 | 99.8 | 3.3 | 11.2 |
| 4 | G64 / 5M | 85.2 | 99.8 | 1.2 | 7.5 |
| 5 | G32 / 5M | 84.8 | 99.8 | 2.1 | 7.5 |
| 6 | G64 / 1M | 84.9 | 99.8 | 1.4 | 7.0 |
| Valid% | Bond% | Charge% | Unique% | SUN% | MSUN% | |
|---|---|---|---|---|---|---|
| 96.6 | 96.7 | 99.9 | 100.0 | 8.7 | 22.0 | |
| (selected) | 97.9 | 98.4 | 99.5 | 100.0 | 18.1 | 38.5 |
| 97.4 | 97.6 | 99.8 | 100.0 | 12.0 | 28.4 |
| Configuration | Adapt. | CB | SG | Valid (%) | Unique (%) | Stable (%) | Meta (%) | MSUN (%) | SUN (%) |
| Full method | 97.9 | 100.0 | 18.1 | 38.5 | 38.5 | 18.1 | |||
| – count bonus | – | 96.3 | 100.0 | 8.7 | 24.6 | 24.6 | 8.7 | ||
| – sub-group mask | – | 96.4 | 100.0 | 7.6 | 27.9 | 27.9 | 7.6 | ||
| – adaptive nov. | – | 96.9 | 99.9 | 8.4 | 26.4 | 26.4 | 8.4 | ||
| adaptive nov. only | – | – | 98.1 | 100.0 | 12.3 | 37.2 | 37.1 | 12.3 | |
| count bonus only | – | – | 96.4 | 100.0 | 7.3 | 28.3 | 28.3 | 7.3 |
| Composition source | Valid% | Unique% | SUN% | MSUN% |
|---|---|---|---|---|
| KLDM + random formulas | 9.5 | 100.0 | 0.2 | 0.4 |
| KLDM + enumerated charge-neutral | 70.1 | 100.0 | 0.8 | 3.1 |
| ANCHOR (selected policy) | 97.9 | 100.0 | 18.1 | 38.5 |
| Crystalite-DNG | KLDM-DNG | |
| Initialization | released checkpoint | MP-20 retrain (below) |
| Learning rate | ||
| Batch size (structures / episode) | 16 | 16 |
| Denoising steps per sample | 150 | 50 |
| Scored steps | churn | all |
| Inner epochs per batch | 1 | 1 |
| Configuration | MSUN | SUN |
| KLDM-CSP | ||
| Released checkpoint | 42.3 | 17.1 |
| FT: MP-20 only (ctl) | 41.9 | 17.1 |
| FT: MP-20 ANCHOR | 41.6 | 16.5 |
| FT: MP-20 ANCHOR , unrelaxed cells | 42.5 | 16.7 |
| FT: MP-20 Crystalite-rendered ANCHOR | 43.9 | 18.9 |