What this is. A concept-validation bonus that demonstrates the inverse-design paradigm and
wires up a full generate → screen → validate loop. Synthesizability is explicitly not
claimed — the point is the method and the closed loop, not the individual candidates.
Position in the portfolio's screening funnel: Project 1 (screening) → Project 3 (generate new candidates) → Project 2 (high-accuracy MLIP-MD validation) → future electrochemical experiment.
- A full generate → screen → score loop runs end-to-end. MatterGen (conditioned on Li-P-S) → self-consistent MLIP convex hull + S.U.N. novelty → Project-1 CatBoost conductivity prior: 64 generated → 61 Li-bearing → 50 stable → 43 S.U.N.
- Two leads handed to Project 2 MD — Li₃PS₄ (gen_016, e_above_hull 0.006, a novel β-polymorph essentially on the hull) and LiPS₃ (gen_021, e_above_hull −0.031, an MLIP-predicted new ground state).
- The handoff produced the portfolio's rank-reversal headline: LiPS₃, scored last of the four by the cheap prior, was MD-validated in Project 2 as a strong conductor (~10 mS/cm).
Full pipeline diagram lives in the flagship repo: Solid-Electrolyte-MLIP-MD/figures/supplementary/08_pipeline_overview.png (generated by 08_pipeline_overview.py). This repo is Project 3 (generate) in that diagram — two of its S.U.N. leads (Li₃PS₄ gen016, LiPS₃ gen021) get MLIP-MD-validated in Solid-Electrolyte-MLIP-MD, including the ranking-reversal finding on LiPS₃.
-
Generate — sample candidate structures from a pretrained MatterGen diffusion model, conditioned on the chemical system Li-P-S.
Raw MatterGen output is already skewed toward low
e_above_hullunder this conditioning — most of the funnel's attrition (64 → 43 S.U.N.) happens gently, not from a pile of wildly unstable structures (see the greyunstabletail above the 0.1 eV/atom cutoff). -
Stability screen — relax each candidate with a universal MLIP (MACE-MP-0), compute
e_above_hull(energy above the convex hull), and report S.U.N. (Stable + Unique + Novel) — the same lens MatterGen reports for itself. -
Score — apply Project 1's OBELiX-trained CatBoost conductivity model to give survivors a coarse ranking prior.
-
Output — a shortlist of "new and relatively stable" candidates to hand to Project 2 MLIP-MD.
Panel a is the screen+score result — stability (
e_above_hull) vs the Project-1 conductivity prior for every candidate, S.U.N. status colour-coded; panel b is the output — the top-8 S.U.N. shortlist actually handed to Project 2. Full table and discussion in Results below.
| script | role | runs on |
|---|---|---|
src/generate.py + 01_generate.py |
--source mattergen runs the official conditional-generation CLI; --source from-results reads an existing *_cif.zip; --source mp-demo pulls real Li-P-S phases as an offline plumbing fixture (not generative output; --rattle displaces atoms to mimic unrelaxed cells) |
mattergen=GPU; else CPU |
src/stability.py + 02_screen_stability.py |
reference phases and candidates relaxed with the same MLIP → self-consistent convex hull → e_above_hull; --calc mace|chgnet (real) / lj (CPU plumbing fixture, energies meaningless) |
GPU (except lj) |
src/novelty.py |
StructureMatcher de-dup among candidates (Unique) + comparison against known MP phases (Novel) | CPU |
src/score.py + 03_score_conductivity.py |
applies the vendored Project-1 model (featurize/predict + catboost_model.cbm) to give each candidate a log₁₀σ prior |
CPU |
04_rank_candidates.py |
merge screen + score → candidates_final.csv + p3_runs.json + two quick-look figures |
CPU |
figures/make_publication_figure.py |
builds a publication-grade composite figure from candidates_final.csv (landscape + shortlist, two panels, vector SVG) |
CPU |
notebooks/01_mattergen_pipeline.ipynb |
cloud orchestration: stage A (isolated py3.10 venv runs MatterGen) → stage B (MACE screen + score) | Colab T4 / Vanda |
# 0) install deps (Python 3.10-3.12; MatterGen generation is a SEPARATE py3.10 env, installed
# separately -- see HPC_VANDA.md)
pip install -r requirements.txt
# local (CPU plumbing check, no GPU) -- proves the generate->screen->score->rank wiring works
python 01_generate.py --source mp-demo --max-demo 6 --rattle 0.1
python 02_screen_stability.py --calc lj --steps 3 --no-relax-cell
python 03_score_conductivity.py
python 04_rank_candidates.py --top 8
# cloud (GPU production) -- see notebooks/01_mattergen_pipeline.ipynb
python 01_generate.py --source mattergen --chemsys Li-P-S --batch-size 16 --num-batches 4
python 02_screen_stability.py --calc mace --ehull-cutoff 0.1
python 03_score_conductivity.py --stable-only && python 04_rank_candidates.py --top 8Self-contained scoring. The Project-1 conductivity model is vendored under
vendor/(catboost_model.cbm+ a self-containedp1_conductivity.py), so this repo clones and runs on its own — no need to clone Project 1 alongside. If the Project 1 repo happens to sit beside it (monorepo layout),score.pyuses that instead — predictions are identical.
- Two-stage isolation. MatterGen pins Python 3.10 with its own torch/lightning stack, which
clashes with the MACE screening environment. Generation runs as a CLI subprocess in a dedicated
venv; screening/scoring run in the kernel; the
--source from-resultsseam joins them, so the screening environment does not depend on the mattergen package. - Self-consistent MLIP hull (not mixed MP/PBE energies). Reference phases and candidates are
relaxed with the same universal MLIP before building the hull, avoiding the systematic
e_above_hullbias you get from mixing "MLIP candidate energy vs PBE+U reference energy" (inconsistent reference states) — this matches MatterGen's own evaluator. Reference energies are cached bymaterial_id, so re-runs are fast. - CPU plumbing fixtures (
mp-demo+lj). Following Project 1's--demo/ Project 2's Lennard-Jones idea, the whole downstream pipeline can be developed and verified on a GPU-less laptop; those outputs are clearly labelled "plumbing check, non-physical". - Require the mobile ion Li (
01_generate.py --require-elements Li, on by default). Conditioned onchemical_system=Li-P-S, MatterGen also emits Li-free P–S binaries, which the Project-1 model happily scores — so a Li-ion-conductor screen must first require Li, or the shortlist head fills with meaningless Li-free phases (this run dropped 3 Li-free phases, keeping 61). - Portable reference cache (
data/ref_structures.json, not a pickle). Reference phases are cached as pymatgenStructure(as_dict), readable across pymatgen versions; a directly pickled MP entry fails to unpickle when the two ends run different pymatgen versions, so we use structure JSON.
- Most generated structures are unstable / unsynthesizable → they must pass the MLIP stability screen (this project's core signal).
e_above_hullcomes from an un-fine-tuned universal MLIP: a relative-stability indicator, not DFT-quantitative. The self-consistent hull removes the reference-state mismatch, but the MLIP's own bias remains.- The conductivity score is a coarse ranking prior (Project-1 model): generated stoichiometries
score with
Family='unknown'and are often P1-symmetry; the score is for ranking and handoff to Project 2 MD only — not a quantitative σ. - MatterGen's own paper validated a single synthesis → this is positioned as concept validation, with no over-promise.
- ✅ Local CPU end-to-end plumbing verified (
mp-demo, 6 real Li-P-S phases +ljhull): generate → screen (e_above_hull+ de-dup + novelty, 96 MP reference phases incl. Li/P/S endpoints) → score (Project-1 CatBoost bridge, cross-projectsrcname clash isolated) → rank + 2 figures, all wired. Note:ljenergies are non-physical andmp-demofixtures are not generative output, sonovel=Falsefor all of them (they are known phases) — which correctly confirms the novelty test. - ✅ Cloud production run (NUS Vanda A40, 2026-07-01): MatterGen conditional generation of
Li-P-S (batch 16×4=64) → Li filter (dropped 3 Li-free P–S binaries, keeping 61) → MACE-MP-0
self-consistent hull screen (96 reference phases) → Project-1 CatBoost scoring → ranked figures.
See
HPC_VANDA.md(PBS + Singularity, reusing Project 2's~/macepkg, entirely free). - ✅ W11: two leads (Li₃PS₄ gen016, LiPS₃ gen021) handed to Project 2 MLIP-MD for a real
σ/Eₐ — one confirmed, one falsified (see the "W11" section of
Solid-Electrolyte-MLIP-MD/README.md);
unified pipeline diagram drawn (
Solid-Electrolyte-MLIP-MD/figures/supplementary/08_pipeline_overview.png, linked at the top of this README).
64 generated → 61 Li-bearing → 50 stable → 43 S.U.N. (ehull_cutoff=0.1 eV/atom). Uniqueness
and novelty are independent flags over the 61-candidate pool (54/61 unique; 61/61 novel — every
survivor is a new polymorph vs the known MP phases), so the 43 S.U.N. is the stable ∧ unique ∧ novel
intersection; full table in data/candidates_final.csv, counts in data/p3_runs.json. Figures for
both the generation funnel and this stability-conductivity landscape are shown inline above, in
MVP steps 1 and 4 respectively.
S.U.N. shortlist head (all Stable + Unique + Novel, ranked by the Project-1 model's predicted log₁₀σ):
| candidate | e_above_hull (eV/atom) | predicted log₁₀σ (S/cm) | note |
|---|---|---|---|
| Li6PS | 0.035 | −6.69 | |
| Li3PS4 | 0.006 | −6.83 | β-Li3PS4 is a known fast-ion conductor; this is a generated novel polymorph, essentially on the hull |
| LiP5S4 | 0.080 | −6.89 | |
| Li3PS4 | 0.036 | −6.93 | another novel Li3PS4 polymorph |
| Li4PS5 | 0.080 | −6.94 | argyrodite-adjacent stoichiometry |
| LiP4S5 | 0.070 | −7.03 | |
| LiPS3 | −0.031 | −7.12 | e_above_hull < 0 → an MLIP-predicted new ground state |
| Li8PS2 | 0.019 | −7.12 |
Honest disclosure:
e_above_hullcomes from an un-fine-tuned MACE-MP-0 (relative stability, not DFT-quantitative); log₁₀σ is the Project-1 model's coarse ranking prior, not a quantitative σ; generated stoichiometries are often P1-symmetry. The shortlist is handed to Project 2 MLIP-MD for high-accuracy validation — positioned as concept validation, with no synthesizability claim.
