Skip to main content

Atomic Environment for Global OptimizatioN

Project description

AEGON

Atomic Environment for Global OptimizatioN — an open-source Python framework for the global optimization of atomic clusters and molecules.

AEGON is built natively on top of the Atomic Simulation Environment (ASE) and operates directly on ase.Atoms objects. It provides a self-contained toolkit covering every stage of a global optimization workflow: random and symmetry-constrained structure generation, built-in potential energy evaluators, genetic-algorithm operators, structure deduplication, and reference databases of pre-optimized clusters. Performance-critical routines are accelerated through Numba just-in-time compilation.


Table of Contents


Features

  • Random structure generation — nine structural templates (compact 3D, diffuse 3D, planar 2D, spherical shell, wire, ring, two-ring, helix, eye) with covalent-radii-based distance constraints and BFS connectivity verification.
  • Symmetry-constrained generation — orbit-by-orbit placement for 30+ molecular point groups (C1 through Ih), with automatic fallback when the composition is incompatible with the requested symmetry.
  • Periodic crystal generation — space-group-aware random crystal structures for all 230 space groups using ASE symmetry operations.
  • Built-in potential energy calculators — Lennard-Jones (LJ) and Sutton-Chen (SC) potentials with Numba-accelerated energy and force evaluation; L-BFGS-B local minimization; ASE Effective Medium Theory (EMT) via BFGS.
  • External quantum chemistry interfaces — unified parser (read_out) for output files from Gaussian, ORCA, VASP, and GULP; input generation and batch execution with parallel queuing.
  • Genetic algorithm operators — mutation (atom displacement, twist), Deaven-Ho cut-and-splice crossover, and dihedral rotamer exploration along bridge bonds.
  • Fitness-proportional selection — roulette wheel selection with a tanh-based fitness mapping.
  • Structure discrimination — USR (Ultrafast Shape Recognition) descriptors for fast deduplication and filtering of large structure pools.
  • Reference cluster databases — pre-optimized LJ clusters (5–130 atoms) and Sutton-Chen clusters for ten transition and main-group metals (Ag, Al, Au, Cu, Ir, Ni, Pb, Pd, Pt, Rh, up to 90 atoms), loaded lazily and cached per session.
  • Visualization — inline Jupyter/Colab rendering with py3Dmol; support for periodic structures with unit-cell edges.

Installation

pip install aegon

Requires Python >= 3.10.

Google Colab

!pip install aegon

Dependencies

Package Role
ASE Atomic structure representation (Atoms objects)
NumPy Array operations throughout
SciPy L-BFGS-B optimization, k-d tree, sparse graph
Numba JIT-compiled energy, force, and descriptor kernels
py3Dmol Inline 3D visualization in Jupyter/Colab

Module Overview

Module Description
libmolgen.py Random cluster generators (nine structural templates, parallel batch generation) and symmetry-constrained generators for 30+ point groups
libcrystalgen.py Space-group-aware periodic crystal generator for all 230 space groups
libclusterfactory.py ClusterFactory class for retrieving pre-optimized LJ and SC reference clusters by size and element
libdata_lj.py Direct access to LJ reference clusters via get_lj_cluster(N)
libdata_sc.py Direct access to SC reference clusters via get_sc_cluster(N, symbol)
libcalc_lj.py Lennard-Jones energy, forces, and L-BFGS-B local minimization (Numba-accelerated)
libcalc_sc.py Sutton-Chen potential for 10 metals with parameters; Numba-accelerated energy/forces and opt_sc / opt_SC_parallel
libcalc_emt.py EMT energy and BFGS local minimization via ASE
libcode.py read_out unified parser for Gaussian, ORCA, VASP, and GULP output files
libmutants.py Mutation operators: atom displacement, twist, overlap resolution
libcrossover.py Deaven-Ho cut-and-splice crossover (crossover_deavenho)
librotamers.py Dihedral rotamer search along bridge bonds using the molecular graph
libsel_roulette.py Roulette wheel selection with tanh-based fitness proportional to energy ranking
libdisc_usr.py USR descriptor computation, batch deduplication (deduplicate_by_usr), and filtering against a reference pool
libutils.py General utilities: sorting, distance functions, rotation matrices, XYZ I/O (readxyzs, writexyzs)
libqueuing.py Parallel bash script execution via multiprocessing.Queue
libgcolab.py Inline py3Dmol visualization for Jupyter and Google Colab (viewmol_ASE)
libposcar.py POSCAR/CONTCAR file writing
libstdio.py Composition I/O: reading composition blocks from AEGON input files, cluster naming

Usage

Generate and optimize a random cluster

from aegon.libmolgen import make_molecules_random
from aegon.libcalc_lj import opt_LJ_parallel

composition = ['Au'] * 7

# Generate 100 random starting structures in parallel
population = make_molecules_random(composition, cuantas=100, n_cores=4)

# Parallel local minimization with the Lennard-Jones potential
optimized = opt_LJ_parallel(population, n_jobs=4)

Generate symmetry-constrained clusters

from aegon.libmolgen import make_clusters_symmetric, make_cluster_symmetric

# Generate 50 clusters with automatically compatible point groups
population = make_clusters_symmetric(['Au'] * 13, cuantas=50, n_cores=4)

# Or fix a specific point group
mol = make_cluster_symmetric(['Au'] * 13, point_group='Ih')

Optimize with the Sutton-Chen potential

from aegon.libmolgen import make_molecules_random
from aegon.libcalc_sc import opt_sc, opt_SC_parallel

composition = ['Au'] * 10
population = make_molecules_random(composition, cuantas=50)

# Single structure
optimized_one = opt_sc(population[0], metal_type='Au')

# Parallel batch
optimized_all = opt_SC_parallel(population, metal_type='Au', n_jobs=4)

Deduplicate a structure pool with USR

from aegon.libdisc_usr import deduplicate_by_usr

unique = deduplicate_by_usr(optimized, tols=0.99, tole=0.1, mono=True)
print(f"{len(optimized)}{len(unique)} unique structures")

Apply genetic algorithm operators

from aegon.libmutants import atom_displacement, twist_mutation
from aegon.libcrossover import crossover_deavenho
from aegon.libsel_roulette import get_roulette_wheel_selection

# Select parents by roulette wheel (fitness-proportional)
parents = get_roulette_wheel_selection(optimized, nmating=20)

# Mutation
mutant = atom_displacement(parents[0], delta=0.4)

# Deaven-Ho cut-and-splice crossover
atomlist = parents[0].get_chemical_symbols()
children = crossover_deavenho(parents[0], parents[1], atomlist)

Read output from quantum chemistry codes

from aegon.libcode import read_out

reader = read_out()

# Final optimized geometry (supported: 'gaussian', 'orca', 'vasp', 'gulp')
mol = reader.geo('gaussian', 'output.log')

# Full optimization trajectory (supported: 'gaussian', 'orca', 'vasp')
traj = reader.traj('orca', 'calculation.out')

Visualize in Jupyter / Colab

from aegon.libgcolab import viewmol_ASE

viewmol_ASE(mol, width=500, height=500)

Reference Databases

AEGON ships two bundled databases loaded lazily at runtime. Each entry is returned as an ase.Atoms object.

Database Potential Available elements Sizes
libdata_lj.npz Lennard-Jones (ε = 1 eV, r₀ = 2^(1/6) σ = 3 Å) any (Mo by default) N = 5–130
SC_<El>_clusters_data.npz Sutton-Chen Ag, Al, Au, Cu, Ir, Ni, Pb, Pd, Pt, Rh N = 5–90

These datasets were generated with the GrowPAL diversity-preserving algorithm and validated against the Wales reference database (LJ) and literature results (SC).

Access via direct functions

from aegon.libdata_lj import get_lj_cluster
from aegon.libdata_sc import get_sc_cluster

# LJ cluster: info keys are 'i' (ID string) and 'e' (energy in eV)
lj38 = get_lj_cluster(38)
print(lj38.info['i'], lj38.info['e'])

# SC cluster
au20 = get_sc_cluster(20, symbol='Au')
print(au20.info['i'], au20.info['e'])

Access via ClusterFactory

from aegon.libclusterfactory import ClusterFactory

# LJ cluster: info keys are 'label' and 'energy'
lj38 = ClusterFactory.get(N=38, model='LJ')
print(lj38.info['label'], lj38.info['energy'])

# SC cluster
au20 = ClusterFactory.get(N=20, model='SC', element='Au')

# List available sizes
print(ClusterFactory.list_available(model='SC', element='Pt'))

Sutton-Chen Parameters

AEGON includes the original Sutton-Chen parameters from Sutton & Chen, Philos. Mag. Lett. 1990, 61, 139–146, for ten metals:

Element n m ε (eV) a (Å) C
Ni 9 6 1.5707×10⁻² 3.52 39.432
Cu 9 6 1.2382×10⁻² 3.61 39.432
Rh 12 6 4.9371×10⁻³ 3.80 144.41
Pd 12 7 4.1790×10⁻³ 3.89 108.27
Ag 12 6 2.5415×10⁻³ 4.09 144.41
Ir 14 6 2.4489×10⁻³ 3.84 334.94
Pt 10 8 1.9833×10⁻² 3.92 34.408
Au 10 8 1.2793×10⁻² 4.08 34.008
Pb 10 7 5.5765×10⁻³ 4.95 45.778
Al 7 6 3.3147×10⁻² 4.05 16.339
from aegon.libcalc_sc import SUTTON_CHEN_PARAMS

params = SUTTON_CHEN_PARAMS['Pd']
print(params['n'], params['m'], params['epsilon'])

Citation

If you use AEGON in your research, please cite the associated manuscript (in preparation).

AEGON is the optimization backend used in:

Gutiérrez-Campos I., Merino G., Ortiz-Chi F. Morphological Diversity as a Selection Principle in Growth-Based Global Optimization.

López-Castro C., Ortiz-Chi F., Merino G. An Efficient Growth Pattern Algorithm (GrowPAL) for Cluster Structure Prediction. J. Chem. Theory Comput. 2024, 20, 4939–4948.


Authors

  • Filiberto Ortiz-Chi — Secihti-Departamento de Física Aplicada, Cinvestav-IPN, Mérida, México
  • Aileen Garcia Cano — Facultad de Ingeniería, Universidad Autónoma de Yucatán, Mérida, México

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aegon-1.3.6.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aegon-1.3.6-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file aegon-1.3.6.tar.gz.

File metadata

  • Download URL: aegon-1.3.6.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for aegon-1.3.6.tar.gz
Algorithm Hash digest
SHA256 ae4db379c4ea16251b7fb3d7510138b89e3b63ddee68a1d93ced13fdbb71690d
MD5 515a0c73889ac888a84a609a32bb1155
BLAKE2b-256 283fdc78126c5be158b02a8ef04038e27be809adcaf7fc2d274e323eb6d7ef0d

See more details on using hashes here.

File details

Details for the file aegon-1.3.6-py3-none-any.whl.

File metadata

  • Download URL: aegon-1.3.6-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for aegon-1.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 cf7ae303a496a5e5faaad2f6ea5f3e9b0862734ee96f06c52f1816f4f2ae2ef9
MD5 d362436312ac3b21c9e54fe42a367d7a
BLAKE2b-256 776b1c70e0edd429171a3633bd1c97c91ddc88bdc63ac58204ff545ea39bae81

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page