aenet.geometry.transformations.DOptimalDisplacementTransformation

class aenet.geometry.transformations.DOptimalDisplacementTransformation(rms: float = 0.1, n_structures: int = 10, max_iter: int = 200, learning_rate: float = 0.1, tol: float = 0.0001, logdet_regularization: float = 1e-06, random_state: int | Generator | None = None, remove_translations: bool = True, enforce_zero_mean: bool = True, verbose: bool = False)[source]

Generate D-optimal (maximally diverse) atomic displacements.

This stochastic transformation generates a fixed number of displaced structures around a reference configuration. The ensemble of displacements is optimized to be maximally diverse by maximizing the log-determinant of the (regularized) covariance matrix of the displacement patterns (D-optimal design criterion).

Purpose

The operation is a set of coordinate perturbations at fixed cell. The D-optimality objective seeks a set of displacement patterns that span the local configuration space as widely as possible for a given number of samples.

param rms:

Target RMS displacement per atom in Angstroms (default: 0.1).

type rms:

float, optional

param n_structures:

Number of displaced structures to generate (>= 2).

type n_structures:

int, optional

param max_iter:

Maximum number of L-BFGS-B iterations (default: 200).

type max_iter:

int, optional

param learning_rate:

(Kept for backward compatibility with earlier projected-gradient implementations; currently unused by the SciPy optimizer.)

type learning_rate:

float, optional

param tol:

Optimizer tolerance (default: 1e-4).

type tol:

float, optional

param logdet_regularization:

Regularization parameter epsilon for covariance (default: 1e-6).

type logdet_regularization:

float, optional

param random_state:

Random seed or generator for reproducibility.

type random_state:

int or numpy.random.Generator, optional

param remove_translations:

If True, remove COM translation per pattern.

type remove_translations:

bool, optional

param enforce_zero_mean:

If True, enforce zero mean displacement across ensemble.

type enforce_zero_mean:

bool, optional

__init__(rms: float = 0.1, n_structures: int = 10, max_iter: int = 200, learning_rate: float = 0.1, tol: float = 0.0001, logdet_regularization: float = 1e-06, random_state: int | Generator | None = None, remove_translations: bool = True, enforce_zero_mean: bool = True, verbose: bool = False)[source]

Methods

__init__([rms, n_structures, max_iter, ...])

apply_transformation(structure, **kwargs)

Apply D-optimal displacement transformation to structure.