Usage¶
Python Bindings¶
Atomic Dimer¶
The primary entry point is the AtomicDimer class, which performs
GPR-accelerated transition state searches.
import numpy as np
from gpr_optim import AtomicDimer, validate_parameters, default_parameters
params = default_parameters()
validate_parameters(params)
dimer = AtomicDimer()
Standalone Gaussian Process¶
For standalone GP usage (training and prediction without the dimer), use
GaussianProcessRegression directly:
from gpr_optim import (
GaussianProcessRegression,
default_gpr_parameters,
validate_parameters,
Observation,
AtomsConfiguration,
initialize_atoms_configuration,
)
# Set up atoms configuration
n_atoms = 2
atom_types = np.ones(n_atoms, dtype=np.int32)
positions = np.random.randn(1, 3 * n_atoms)
atoms_config = initialize_atoms_configuration(positions, atom_types)
# Set up observations
obs = Observation()
obs.R = positions # (n_obs, 3*n_atoms)
obs.E = np.array([[0.5]]) # (n_obs, 1)
obs.G = np.random.randn(1, 3 * n_atoms) # (n_obs, 3*n_atoms)
# Configure and train
params = default_gpr_parameters()
validate_parameters(params)
gpr = GaussianProcessRegression()
gpr.initialize(params, atoms_config)
gpr.set_hyperparameters(obs, atoms_config)
gpr.optimize(obs)
# Predict
query = Observation()
query.R = np.random.randn(1, 3 * n_atoms)
gpr.calculate_potential(query) # fills query.E and query.G
Observation Layout¶
Observations use row-major matrices where rows = number of observations:
Field |
Shape |
Description |
|---|---|---|
|
|
Coordinates of moving atoms |
|
|
Energies |
|
|
Gradients (not forces) |
C++ API¶
See the Doxygen API reference for full C++ documentation.