Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
ALF documentation
ALF documentation

Documentation

  • Explanation
    • Why ALF?
    • Intro to Active Learning
    • Core Concepts
  • Tutorials
  • How-to / Recipes
    • Add your own model
    • Add a dataset
    • Add an acquisition function
    • Add a search function
    • Switch offline to online
    • Run with Docker
  • Reference
    • Glossary
  • ALF Installation Guide

API Reference

  • Core
    • Dataclasses
      • Candidate
      • Labelled Candidates
      • Predictions
      • Results
      • Round Metrics
      • State
      • Surrogate Epoch Metrics
    • Dataset
      • Base Dataset
      • Splitting Utils
    • Model
      • Base Model
      • Normalisers
    • Optimizer
      • Optimizer
      • Acquisition Function
      • Search
    • Oracle
    • Surrogate
    • Tasks
      • Base Task
      • Design Task
      • Supervised Task
      • Zero-Shot Task
    • Utils
      • Enums
      • Metrics
        • Acquisition Batch
        • Base
        • Calibration
        • Classification
        • Design Task Metrics
        • Regression
      • State Logger
  • Tools
    • Datasets
      • GFP Dataset
      • ProteinGym Dataset
      • FLIP Dataset
      • GuacaMol Dataset
      • Matbench Dataset
    • Models
      • CNN Model
      • MLP Model
      • ESMFold Model
      • GP Model
      • ESM2 Model
      • Chemprop Model
      • MLIP Model
      • PyRosetta Model
      • Ensemble Wrapper
      • GuacaMol Oracle
      • Utilities
    • Optimizer
      • Acquisition Functions
        • BoTorch Acquisition Wrapper
        • BoTorch MC Samplers
        • CoreSet
        • Expected Improvement
        • Greedy
        • Random
        • Thompson Sampling
        • Uncertainty Sampling
        • Upper Confidence Bound (UCB)
      • Search Strategies
        • Botorch Continuous Search
        • Single Mutant Search
        • SMILES Mutation Search
        • Element Substitution Search
    • Utils
      • Constants
Back to top
View this page

Element Substitution Search¶

Element Substitution Search generates candidate crystals by swapping one element for another in the best-labelled training structures. Swaps are drawn from the Hautier et al. (2011) substitution table, data-mined from the ICSD, so only pairs with precedent in known chemistry are proposed, and only charge-balanced results are kept. Candidates are returned ordered by substitution probability, most plausible first, and anything already evaluated in the run is filtered out.

allowed_elements lists the element symbols the oracle can score, and is required. The substitution table reaches further up the periodic table than most scoring models, and a candidate the oracle cannot score returns NaN, which propagates into the training labels and costs a round.

top_k sets how many training structures are used as parents, counting only those that actually yield new candidates. Structures are tried in label order, skipping any that cannot be assigned oxidation states — bond-valence analysis has no parameters for some elements, notably several actinides — and any whose substitutions have all been proposed before. Such structures tend to cluster at the top of the ranking, so a fixed top-k slice would stall on them.

Two limits are worth knowing:

  • The number of distinct elements is preserved, so a binary parent gives binary children and the reachable space is bounded by the stoichiometries already present in the training set.

  • The parent’s lattice is reused without relaxation, leaving bond lengths that are wrong for the new chemistry. Harmless when the featuriser uses only composition, but a structural featuriser needs a volume rescaling or relaxation first.

Requires the matbench extra, which supplies pymatgen.

Next
Utils
Previous
SMILES Mutation Search
Copyright © 2026, InstaDeep
Made with Sphinx and @pradyunsg's Furo