Algorithms
How DispatchAtlas separates solver behavior from benchmark generation — the algorithm families, dispatching rules, metaheuristics, and exact backends available to campaigns.
DispatchAtlas separates solver behavior from benchmark generation and
campaign execution. Every solver lives in dispatchatlas.solve behind one
registry, and solver metadata is the public contract for objectives,
capabilities, encodings, dependencies, stochasticity, evidence-tier
visibility, and optional backends. This page explains the solver families at
a working level; the solver system registry page is the
authoritative per-solver catalog.
🏗️ How Solvers Are Organized
default_solver_registry() returns the registry of stateless solver
factories. Each entry declares capability tags, supported objectives,
default stop criteria, deterministic or seeded-stochastic replay behavior, a
solution encoding, optional-dependency requirements, evidence-tier
visibility, and a canonical citation (or an explicit
citation-not-applicable rationale). Citations fail closed: a family with a
canonical seminal origin that omits its reference cannot be constructed.
🧰 Solver Families
| Family | Examples | Use |
|---|---|---|
| Constructive dispatching | earliest-start, shortest-processing-time, earliest-deadline, minimum-slack | Fast deterministic baseline schedules and smoke checks. |
| Metaheuristic baselines | genetic, annealing, ant colony, particle swarm, differential evolution | Representative seeded search baselines over precedence-safe task orders. |
| Encoded adapters | clpso, d-clpso, lshade, d-lshade | Continuous optimizers bound to scheduling through encoding adapters. |
| Recent peers | epso, adpso, ccgp | Recent published peers that clear a source-grounded venue-strength bar. |
| Many-objective | nsga3 | Reference-point niching over a multi-objective vector. |
| Exact adapters | ortools-cp-sat, pulp-milp, branch-and-bound, logic-based-benders-decomposition, gurobi-exact, exhaustive-enumeration, decision-diagram-sequencing | A curated exact handful behind optional dependencies or native bounded search. |
| NDSO | ndso-core, ndso-fast, ndso-summit | The registry's native-encoding solver family. |
📋 Constructive dispatching rules
The bundled deterministic baselines are constructive list-scheduling
solvers: each controls task order, and the serial constructor honors every
task's declared resource demands. The eight families — earliest-start,
shortest-processing-time, longest-processing-time,
earliest-deadline,
earliest-finish-time, minimum-slack, greedy-completion, and
apparent-tardiness-cost — each name
their canonical seminal reference in metadata. They are the fastest path to a feasible
schedule and anchor every comparison, as in the first
tutorial.
🔀 Metaheuristic baselines
Five representative seeded metaheuristics — genetic algorithm, simulated annealing, ant colony, particle swarm, and differential evolution — share the same feasibility, repair, scoring, and local-search operators, so a comparison measures search strategy rather than incidental plumbing differences.
🔌 Encoded adapter solvers
Comprehensive-learning particle swarm (clpso, d-clpso) and
success-history adaptive differential evolution (lshade, d-lshade)
search a continuous real-valued vector with one component per task. Each
core is generic over a continuous objective and is bound to scheduling
through a named encoding adapter (random-key, spv, rounding, and the
transfer-function decodes) that turns a vector into a precedence-feasible
task order, with an explicit repair policy that records whether repair
fired.
🥊 Diversified competitors and the many-objective lane
A curated set of recent published peers broadens the comparison beyond the
representative baselines, each carrying its full-text reference, strengths,
and caveats in metadata. A peer joins the public field only when it clears a
source-grounded venue-strength bar; a broader pool of classical baselines stays
registered for internal comparison. nsga3 is
the named many-objective competitor: it evaluates each precedence-safe
order on a multi-objective vector (makespan, lateness, load fairness) and
selects survivors by reference-point niching.
🎯 Exact adapters
Optional-backend adapters (CP-SAT, MILP, branch-and-bound) declare an optional
dependency and probe its import root at runtime; when the backend is absent
they raise MissingOptionalDependencyError with the extra name and
licensing note instead of importing a heavyweight dependency at package
import. Native-bounded adapters (exhaustive-enumeration and
decision-diagram-sequencing) carry no third-party dependency and solve
small instances exactly, raising
UnsupportedCapabilityError past the supported task count. The commercial
Gurobi wrapper stays behind the exact-commercial extra and is never bundled;
a broader pool of optional backends stays registered for internal use.
🐝 The NDSO Family
NDSO is the registry's native-encoding solver family: it searches directly over feasible schedules, so every schedule it produces is feasible by construction and the family never runs an encode/decode step or a repair pass. It composes a small set of named mechanisms:
- a Confidence Matrix of learned trust per (position, task) cell, reinforced by better schedules;
- Confidence-Weighted Voting, which synthesizes the elite schedule by voting across the population weighted by that matrix;
- Quantity-and-Quality schedules that set how much a candidate changes and which guidance source it learns from;
- three-source guidance — the synthesized elite (exploitation), a peer (diversity), or a vanished-knowledge source (radical exploration);
- a unified adaptive coefficient, one non-linear schedule that shifts the family from exploration to exploitation.
| Variant | Composition |
|---|---|
ndso-core | Confidence-Weighted Voting, adaptive coefficient, three-source guidance. |
ndso-fast | Majority-vote synthesis, fixed coefficient, single guidance source. |
ndso-summit | Inter-group council coordinating several groups and synthesizing their results into one over-arching elite. |
An ablation map enumerates one isolating configuration per named mechanism so downstream analysis can attribute each mechanism's contribution, and a staged export filter fails closed rather than exposing a later-tier mechanism under a lower report scope. The full mechanism, council, ablation, and diagnostics detail lives in solver system; no performance claim is made before the comparative campaigns run.
🎛️ Selection
SolverRegistry.select matches solvers by capability tags, declared
constraints, supported objective, and evidence-tier visibility — the quick
start's registry.select(objective="makespan", disclosure_label=DisclosureLabel.CORE) is the smallest example. Above the
registry, the selection layer ranks solvers for a problem from
characterization features and public metadata, labels each recommendation by
its source and confidence, and never claims a universal best solver. The
solver recommender presents those
explanations, including why a solver was excluded.