Skip to content

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.

from ACT import DEEM

DEEM.optimize(maxiter=200, n_cpu=8, similarity="frechet")

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.