Solver-backed ULS methods must not hard-code one mathematical optimizer.
SolverKind.Automatic uses the same default priority as LotSizingDataModel:
Starting with v0.16.0, the four concrete discovery adapters are included in the main package and can be used without manually constructing a registry:
The first adapter that both:
is selected.
A solver that is installed but cannot load its libraries, lacks a usable license, or does not expose a required capability is skipped with a diagnostic.
To inspect the complete machine state:
The report always follows the standard CPLEX → Gurobi → Xpress → CBC order and contains both usable and unavailable solver diagnostics.
A caller may request a concrete solver. With SolverSelectionOptions.RequireExactSolverKind = true, failure of that solver does not trigger fallback. With the default false, the requested solver is tried first, followed by the standard priority.
A solver-backed algorithm should attach SolverExecutionInfo to its detailed execution result. The snapshot records:
This allows benchmark and computational-study results to identify the engine that actually executed the mathematical model.