The task of finding a periodic allocation of atoms on a grid in space that minimises their pairwise interaction energy can be encoded as an integer program. Such integer program can be solved either using advanced solvers to obtain provably optimal solutions or using quantum annealers (or any other Ising machine) for a potential speed-up or energy efficiency. Subsequently, solutions of the periodic lattice allocation problems can be used to predict crystal structures of materials or perform other investigations of the potential energy surfaces.
This package provides implementation of this encoding for uniform grids in cubic/non-cubic unit cells, where the interaction energy is a sum of Statistical Proxy Potentials(SPPs). In the current implementation, the resulting integer programs can be solved either using Gurobi or D-Wave quantum annealer.
If the package is run as a module, the program presents an interactive menu to perform crystal prediction of either several well-known crystal structures or a composition (e.g. SrTiO3) provided by the user. Solutions of integer programs are reported alongside the outcomes of subsequent local minimisations and the expected outcomes.
On top of the commonly used python packages, the code relies on:
- Gurobi to solve integer programs on classical computers (tested with v13.0). Academic licence is available free of charge.
- D-Wave Leap and its SDK to solve quadratic unconstrained binary problems (tested with dwave-ocean-sdk v9.3.0). Classical simulation annealing algorithm is available as well in the same package for testing purposes and requires no registration.
- CHGNet for subsequent local optimisations of periodic lattice allocations (tested with v0.4.2).
- GULP for calculating SPP scores of periodic lattice allocations and their relaxed structures (tested with 6.3.4).
- Atomic Simulation Environment to run CHGNet, GULP calculations and handle crystal files.
- Statistical Proxy Potentials to download SPP.zip.
It can be installed using pip:
pip install git+https@github.com:lrcfmd/ipcsp-spp.gitThis package requires SPP files that are distributed separately as a ZIP archive.
Download the SPP.zip from the link provided in the Dependencies section, extract it
and place the extracted folder at the same level as __main__.py.
For development installation:
git clone git@github.com:lrcfmd/ipcsp-spp.git
cd ipcsp-spp
pip install -e .The code can be run as a module:
python -m ipcsp2Upon launching, the program presents an interactive menu in your terminal. You will be prompted to choose one of two available options.
Choose an option:
1. Run predefined benchmarks
2. Enter custom chemical composition
Enter your choice (1 or 2):
Option 1 will perform prediction of a variety of well-known crystal structures e.g. SrTiO3, Y203.
Option 2 requires you to provide chemical composition (e.g. SrTiO3, Co4As8), unit cell parameters,
grid number(s) for each side of the cell, space group number, K-Best solutions of the integer programming.
The experimentally determined structures corresponding to the benchmark test cases are stored in
structures/. Crystal structure prediction problems to run with option 1 can be
selected by modifying test key in the settings dictionary
defined in __main__.py as well as other parameters of the corresponding
lattice allocation problems.
This repository accompanies the manuscript "Quantum-ready Crystal Structure Prediction using Statistical Proxy Potentials", which is currently under review for publication in Philosophical Transactions of the Royal Society A.
The code is provided to facilitate reproduction of the results reported in the manuscript. Upon publication, the corresponding citation and DOI will be added to this repository.
