ULSAlgorithms 1.1.0-g3e5595996d
High-performance exact and heuristic algorithms for uncapacitated lot sizing
Loading...
Searching...
No Matches
OptimizationSolverDiscovery.cs
Go to the documentation of this file.
2
3/// <summary>
4/// High-level entry point used by solver-backed ULS algorithms to discover and
5/// select a mathematical optimizer automatically.
6/// </summary>
7public static class OptimizationSolverDiscovery
8{
9 private static readonly IReadOnlyList<SolverKind> StandardOrder =
10 Array.AsReadOnly<SolverKind>(
11 [
12 SolverKind.Cplex,
13 SolverKind.Gurobi,
14 SolverKind.Xpress,
16 ]);
17
18 /// <summary>
19 /// Gets the standard automatic solver priority.
20 /// </summary>
21 public static IReadOnlyList<SolverKind> DefaultPriority =>
22 StandardOrder;
23
24 /// <summary>
25 /// Probes every built-in adapter in standard priority order.
26 /// </summary>
27 public static async ValueTask<SolverDiscoveryReport>
29 CancellationToken cancellationToken = default)
30 {
31 SolverAdapterRegistry registry =
33
34 var availability =
35 new List<SolverAvailabilityInfo>(
36 StandardOrder.Count);
37
38 foreach (SolverKind solverKind in StandardOrder)
39 {
40 cancellationToken.ThrowIfCancellationRequested();
41
43 registry.FindBySolverKind(solverKind)
44 .Single();
45
46 availability.Add(
47 await adapter.CheckAvailabilityAsync(
48 cancellationToken));
49 }
50
51 return new SolverDiscoveryReport(
52 availability);
53 }
54
55 /// <summary>
56 /// Selects the requested solver using all built-in adapters.
57 /// </summary>
58 /// <remarks>
59 /// Solver-backed algorithms should normally call this method with
60 /// <see cref="SolverKind.Automatic"/> once at the beginning of a solve and
61 /// keep the resulting <see cref="SolverSelectionResult"/> for the complete
62 /// execution.
63 /// </remarks>
64 public static ValueTask<SolverSelectionResult>
66 SolverKind requestedSolver = SolverKind.Automatic,
67 SolverSelectionOptions? options = null,
68 CancellationToken cancellationToken = default)
69 {
70 SolverAdapterRegistry registry =
72
73 return new SolverSelectionService()
75 requestedSolver,
76 registry,
77 options,
78 cancellationToken);
79 }
80}
Creates the built-in concrete solver-adapter registry.
static SolverAdapterRegistry Create()
Creates a registry containing CPLEX, Gurobi, Xpress and CBC adapters.
High-level entry point used by solver-backed ULS algorithms to discover and select a mathematical opt...
static async ValueTask< SolverDiscoveryReport > DiscoverAllAsync(CancellationToken cancellationToken=default)
Probes every built-in adapter in standard priority order.
static IReadOnlyList< SolverKind > DefaultPriority
Gets the standard automatic solver priority.
static ValueTask< SolverSelectionResult > SelectAsync(SolverKind requestedSolver=SolverKind.Automatic, SolverSelectionOptions? options=null, CancellationToken cancellationToken=default)
Selects the requested solver using all built-in adapters.
Stores optimization-solver adapters and provides deterministic lookup by adapter identifier and solve...
Complete availability snapshot for all built-in solver adapters.
Configures automatic or explicit optimization-solver selection.
Selects a usable optimization solver by capability, machine availability, and deterministic priority.
async ValueTask< SolverSelectionResult > SelectAsync(SolverKind requestedSolver, SolverAdapterRegistry registry, SolverSelectionOptions? options=null, CancellationToken cancellationToken=default)
Selects an optimization-solver adapter.
Defines the common metadata and availability contract implemented by every optimization-solver adapte...
ValueTask< SolverAvailabilityInfo > CheckAvailabilityAsync(CancellationToken cancellationToken=default)
Performs the adapter-specific machine discovery / load / license check.
SolverKind
Identifies a mathematical optimization solver that can be used by solver-backed ULS algorithms.
Definition SolverKind.cs:15
@ CoinOrCbc
COIN-OR CBC mixed-integer programming solver.
Definition SolverKind.cs:32