/drxnet

A Python package for learning representations of battery discharge voltage profiles across diverse compositions in disordered rocksalt cathodes (DRX).

Primary LanguagePython

DRXNet

A Python package for learning representations of battery discharge voltage profiles across diverse compositions in disordered rocksalt cathodes (DRX).

Preprint at: https://arxiv.org/abs/2304.04986

Inputs:

  1. composition (string)
  2. current density rate (mA/g)
  3. test voltage window (V)
  4. cycle number (integer)

Dependency

  • Requirements: pymatgen, torch, torch-scatter.
  • Here is a simple installation if you are using DRXNet for prediction on CPU:
conda create -n drxnet python=3.9
conda activate drxnet

pip install pymatgen
pip install torch==1.12.0 -f https://download.pytorch.org/whl/cpu/torch_stable.html
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.12.0+cpu.html

Installation

python setup.py install

Examples

We open-sourced the pretrained models in ./drxnet/pretrained/. We provided an example script for DRXNet training using the initial ten cycles of Li1.2Mn0.4Ti0.4O2.0 (LMTO) (see ./examples/train_example/, simply run python train_LMTO.py).

The model and the training scheme are highly expandable to other systems, such as element-doping in NCM materials, high-entropy Na-ion cathode, etc. Practitioners can customize their own electrochemical dataset and parameterize the model to make predictions.

The following examples require the pretrained model:

(1) Discharge capacity predictions in Li-Mn-O-F chemical space ./examples/[1]-predict_LMOF_chemical_space.ipynb

(2) Multi-rate performance predictions of high-entropy DRXs ./examples/[2]-predict_HE-DRX.ipynb

Quick start

If you have generated the model weights, you can save them as ./pretrained/model_0, and you can run the following example to get the voltage profile.

from drxnet.funciton import load_pretrained_models, ensemble_prediction, voltageFeaturizer
from drxnet.drxnet.model import DRXNet
from drxnet.core import Featurizer
import matplotlib.pyplot as plt

############# load the pretrained models #############
model_list = load_pretrained_models()
vol_featurizer  = voltageFeaturizer()

############# predict discharge curve #############
Q_, V_ , *_ =  ensemble_prediction(model_list = model_list,
                                   vol_featurizer = vol_featurizer,
                                   composition_string = 'Li1.2Mn0.2Cr0.2Ti0.4O2.0',
                                   input_rate = 20,
                                   input_cycle = 1,
                                   input_V_low = 1.5,
                                   input_V_high = 4.8)

plt.plot(Q_, V_, '-', color = 'k', linewidth = 2.0)
plt.show()

Acknowledgement

The Roost (Representation Learning from Stoichiometry) and mat2vec is used for compositional encoding in DRXNet. Please consider citing the relevant works:

  • R. E. A. Goodall and A. A. Lee, Predicting Materials Properties without Crystal Structure: Deep Representation Learning from Stoichiometry, Nat. Commun. 11, 6280 (2020). [link]

  • V. Tshitoyan, J. Dagdelen, L. Weston, A. Dunn, Z. Rong, O. Kononova, K. A. Persson, G. Ceder, and A. Jain, Unsupervised Word Embeddings Capture Latent Knowledge from Materials Science Literature, Nature 571, 95 (2019). [link]