Optimization¶
At the heart of numgeo-ACT is a global optimizer that searches the space of free parameters for the set that best reproduces your laboratory data. The default and recommended optimizer is DEEM.
DEEM — Differential Evolution with Elitism and Multi-populations¶
DEEM is a population-based, derivative-free global optimizer developed specifically for the kind of rugged, multi-modal objective functions that arise in constitutive-model calibration. It builds on differential evolution and adds two ingredients:
- Elitism — the best-performing parameter sets are preserved across generations, so good solutions are never lost.
- Multi-populations — several sub-populations evolve in parallel, which improves exploration of the parameter space and reduces the chance of becoming trapped in a poor local minimum.
This combination makes DEEM robust for problems where gradient-based methods struggle (discontinuous, noisy or many-minima objective surfaces), while remaining efficient enough for routine use.
DEEM has its own documentation
DEEM is developed and documented as a stand-alone optimizer. For the full
theory (sub-populations, elitism, the position-update equations, boundary
handling and the diversity-based restart), the improved DEEMI variant, and
the optimizer's own API reference, see:
DEEM documentation ·
j-machacek/DEEM on GitHub
Reference
Machaček, J., Siegel, S. & Zachert, H. (2025). DEEM — Differential Evolution with Elitism and Multi-populations. Swarm and Evolutionary Computation, 92, 101818. doi:10.1016/j.swevo.2024.101818
How the optimizer is used¶
flowchart LR
subgraph one iteration
P[population of<br/>parameter sets] --> S[simulate every test<br/>with numgeo]
S --> O[objective value<br/>per parameter set]
O --> E[selection + elitism<br/>+ DE recombination]
E --> P
end
E -->|converged| R[best parameter set]
Each iteration (generation) evaluates a whole population of candidate parameter sets. For every candidate, numgeo-ACT runs the selected laboratory tests and computes a single objective value. DEEM then recombines the best candidates to form the next generation, repeating until the convergence criterion is met.
The full list of DEEM.optimize(...) arguments — population sizes, number of
sub-populations, iteration limits, sampling and termination — is documented on
the workflow page.
Run a simulation-only pass first
DEEM.optimize(method="no_optimization") runs the initial parameter set once
through all tests without optimizing. Use it to confirm your database and
starting parameters produce sensible simulations before launching a full
calibration.
Initial sampling¶
Before the first generation, the initial population is drawn across the bounded
parameter space. By default this uses Latin Hypercube Sampling (sampling='LHS'),
which spreads the initial guesses more evenly than uniform random sampling and
gives the optimizer a better starting spread.
Parallelization¶
Each candidate requires a set of numgeo simulations, and a generation contains
many candidates — so calibration is embarrassingly parallel. Set n_cpu to
the number of available cores; this is the most effective lever on wall-clock
time. Per-test timeouts ensure that a
pathological parameter set cannot stall a generation.
Alternative optimizers¶
DEEM is the default, but numgeo-ACT also exposes other back-ends for experimentation and comparison:
| Back-end | Module | Notes |
|---|---|---|
| DEEM | built in | default; robust global optimizer (recommended) |
| mealpy | ACT.utilities.mealpy |
large library of metaheuristic optimizers |
| scipy | ACT.utilities.scipy |
gradient-free and gradient-based methods from SciPy |
| Bayesian | ACT.bayesian |
surrogate-model-based optimization |
Continue to Objective function & similarity to see how the fit is scored, and Weighting of tests to control how individual tests and quantities are balanced.