A systematic benchmark pipeline for the SE-Euler BB optimizer and its L-BFGS hybrid, developed as part of a PhD research project at Iowa State University.
This repository contains the benchmark pipeline for studying and comparing a new class of first-order optimization algorithms designed for molecular potential energy surface (PES) exploration. The central contribution is the SE-Euler BB optimizer — a damped dynamical system discretized with semi-implicit Euler integration, where the damping coefficients are controlled by Barzilai-Borwein (BB) Rayleigh quotient curvature estimates — and its two-phase hybrid with L-BFGS.
The benchmark is designed to address a specific challenge in molecular optimization: each force (gradient) evaluation is computationally expensive, so the primary metric is force evaluations to convergence, not wall time or iteration count alone.
Classical optimization methods from the convex optimization and machine learning communities (Adam, Nesterov, L-BFGS) are not designed for the molecular optimization regime, where:
- Gradients are exact and expensive — no stochastic noise, but each evaluation may cost seconds to hours (DFT or force-field calls).
- The landscape is non-convex with barriers, harmonic basins, and saddle points.
- No Lipschitz constant or condition number is known in advance.
- The optimizer must work without hyperparameter tuning across different chemical systems.
The SE-Euler BB hybrid addresses these constraints by:
- Using BB Rayleigh quotients to estimate local curvature from secant pairs — no Hessian required.
- Detecting harmonic basin entry via a convexity streak criterion — scale-free, geometry-based.
- Warm-starting L-BFGS with secant pairs accumulated during Phase 1 — the switch happens at the right moment with the right information.
This work is a direct response to the open question in Simon, Kaistha & Agarwal (React. Chem. Eng. 2025), which states: "accelerated algorithms similar to AARE could also be developed using the L-BFGS direction, which can be explored in future work."
| Tier | Problem class | Status |
|---|---|---|
| 1 | nD analytical functions | In progress |
| 2 | Molecular geometry optimization | Planned |
| 3 | Nudged elastic band (NEB) | Planned |
| 4 | Hartree-Fock orbital optimization | Future work |
| # | Method | Family | Role |
|---|---|---|---|
| 1 | SE-Euler BB | Dynamical systems | Base method |
| 2 | SE-Euler BB + L-BFGS hybrid | Dynamical systems | Main contribution |
| 3 | BFGS | Quasi-Newton | Full quasi-Newton upper bound |
| 4 | L-BFGS (Armijo) | Quasi-Newton | Memory-limited quasi-Newton |
| 5 | FIRE | Molecular MD | Community standard |
| 6 | AARE-FR | Molecular MD | Direct literature competitor |
| 7 | AARE-PR | Molecular MD | Direct literature competitor |
| 8 | Acc-CG | Conjugate gradient | Direct literature competitor |
| 9 | Nesterov (NAG) | Convex optimization | Theoretical ancestor |
| 10 | Adam | Machine learning | AI community baseline |
se_euler_benchmark/
│
├── README.md # this file
├── environment.yml # conda environment
├── .gitignore
│
├── functions/
│ ├── README.md
│ ├── base_function.py # abstract base class
│ ├── 2d/ # 26 AARE + existing 2D functions
│ ├── 4d/ # 5 AARE Table 2 functions
│ └── nd/ # scalable versions (n=10, 30, 100)
│
├── methods/
│ ├── README.md
│ ├── se_euler_BB.py
│ ├── se_euler_BB_lbfgs_hybrid.py
│ ├── fire.py
│ ├── aare_fr.py
│ ├── aare_pr.py
│ ├── acc_cg.py
│ ├── bfgs.py
│ ├── lbfgs.py
│ ├── nesterov.py
│ └── adam.py
│
├── benchmark/
│ ├── README.md
│ ├── run_benchmark.py # systematic runner
│ ├── starting_points.json # fixed seed, 100 pts per function
│ └── config.yaml # tolerances, convergence modes
│
├── results/
│ ├── README.md
│ ├── store1_robustness.csv # 100 starting points per function
│ ├── store2_literature.csv # 5 representative points
│ └── store3_convergence.csv # full gradient norm history
│
├── analysis/
│ ├── README.md
│ ├── figures/ # saved plots
│ ├── tables.py # AARE-style comparison tables
│ ├── convergence_plots.py # semi-log ||F|| vs force evaluations
│ ├── performance_profiles.py # Dolan & Moré performance profiles
│ └── trajectory_plots.py # 2D trajectory visualization
│
└── docs/
├── algorithm_description.md
├── benchmark_design.md
└── literature_context.md
Three measurements are recorded at every run:
| Measurement | Description | Primary use |
|---|---|---|
| Force evaluations (FE) | Total calls to f.functionvalue() |
Cross-method comparison |
Convergence rate ρ_k |
‖∇E_k‖ / ‖∇E_{k-1}‖ |
Linear vs superlinear classification |
| Switch diagnostics | convex_streak, ratio_streak, lbfgs_pairs |
Hybrid behavior analysis |
Two convergence criteria are used in every run:
‖F‖ < 0.01— AARE paper standard (Simon et al. 2025, Tables 1 & 2)‖F‖ < 1e-6— optimization literature standard
Results are stored in three CSV files loaded with pandas for analysis.
git clone https://github.com/fcuantico/se_euler_benchmark.git
cd se_euler_benchmark
conda env create -f environment.yml
conda activate se_euler_benchmarkpython benchmark/run_benchmark.py --config benchmark/config.yaml- Simon, Kaistha & Agarwal (2025) — AARE/Acc-CG, direct benchmark target
- Bitzek et al. (2006) — FIRE, molecular community standard
- Barzilai & Borwein (1988) — BB step sizes
- Muehlebach & Jordan (2019) — SE-Euler connection to Nesterov
- Liu & Nocedal (1989) — L-BFGS
- Dolan & Moré (2002) — performance profiles
This project is under active development as part of a PhD dissertation at Iowa State University. Results and documentation will be updated as the benchmark suite is completed.
To be added upon publication.