LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
ScientificResolutionPlanner.cs
Go to the documentation of this file.
1using LotSizingDataModel.Instance.Scientific;
4
6
7/// <summary>
8/// Builds an explainable scientific resolution plan from already classified
9/// instance/formulation evidence.
10/// </summary>
11public sealed class ScientificResolutionPlanner
12{
14 _methodCompatibilityService;
15
21
24 methodCompatibilityService)
25 {
26 _methodCompatibilityService =
27 methodCompatibilityService ??
28 throw new ArgumentNullException(
29 nameof(methodCompatibilityService));
30 }
31
33 ScientificClassificationResult classification,
34 ScientificFormulationSelectionResult formulationSelection,
35 SolverKind requestedSolverKind)
36 {
37 ArgumentNullException.ThrowIfNull(classification);
38 ArgumentNullException.ThrowIfNull(formulationSelection);
39
42 .Select(
43 method =>
44 _methodCompatibilityService.Assess(
45 classification,
46 formulationSelection,
47 method))
48 .ToArray();
49
50 ScientificSolutionMethodCandidate? selectedMethod =
51 candidates
52 .Where(candidate => candidate.IsExecutableCandidate)
53 .OrderBy(
54 candidate =>
55 candidate.Method.MethodId,
56 StringComparer.Ordinal)
57 .FirstOrDefault();
58
59 var diagnostics =
60 new List<string>();
61
62 if (classification.IsBlocked)
63 {
64 diagnostics.Add(
65 "Scientific classification is blocked.");
66
67 return new ScientificResolutionPlan(
69 classification,
70 formulationSelection,
71 candidates,
72 selectedMethod: null,
73 requestedSolverKind,
74 backendCandidates:
76 selectedBackend: null,
77 diagnostics);
78 }
79
80 if (selectedMethod is null)
81 {
82 diagnostics.Add(
83 "No executable scientific solution method is available.");
84
85 return new ScientificResolutionPlan(
86 ScientificResolutionPlanStatus.NoExecutableMethod,
87 classification,
88 formulationSelection,
89 candidates,
90 selectedMethod: null,
91 requestedSolverKind,
92 backendCandidates:
94 selectedBackend: null,
95 diagnostics);
96 }
97
98 ScientificSolverBackendDefinition[] backendCandidates =
99 selectedMethod.Method.RequiresMilpBackend
101 .Where(
102 backend =>
103 backend.Supports(selectedMethod.Method))
104 .ToArray()
105 : Array.Empty<ScientificSolverBackendDefinition>();
106
107 ScientificSolverBackendDefinition? selectedBackend =
108 null;
109
110 if (
111 requestedSolverKind != SolverKind.Automatic)
112 {
113 selectedBackend =
115 requestedSolverKind);
116
117 if (
118 selectedBackend is null ||
119 !selectedBackend.Supports(
120 selectedMethod.Method))
121 {
122 diagnostics.Add(
123 $"Requested solver backend '{requestedSolverKind}' is " +
124 $"not scientifically compatible with selected method " +
125 $"'{selectedMethod.Method.MethodId}'.");
126
127 return new ScientificResolutionPlan(
128 ScientificResolutionPlanStatus.BackendIncompatible,
129 classification,
130 formulationSelection,
131 candidates,
132 selectedMethod,
133 requestedSolverKind,
134 backendCandidates,
135 selectedBackend: null,
136 diagnostics);
137 }
138 }
139
140 diagnostics.Add(
141 requestedSolverKind == SolverKind.Automatic
142 ? "Resolution method is fixed scientifically; concrete MILP " +
143 "backend remains delegated to technical availability."
144 : $"Resolution method and requested backend " +
145 $"'{requestedSolverKind}' are scientifically compatible.");
146
147 return new ScientificResolutionPlan(
149 classification,
150 formulationSelection,
151 candidates,
152 selectedMethod,
153 requestedSolverKind,
154 backendCandidates,
155 selectedBackend,
156 diagnostics);
157 }
158}
Explicit scientific resolution plan: problem -> formulation -> solution method -> compatible backend ...
ScientificResolutionPlanner(ScientificSolutionMethodCompatibilityService methodCompatibilityService)
ScientificResolutionPlan Create(ScientificClassificationResult classification, ScientificFormulationSelectionResult formulationSelection, SolverKind requestedSolverKind)
Assesses scientific method-family relevance independently from solver backend availability.
Known native optimization backends in the current Solver abstraction.
static ? ScientificSolverBackendDefinition Find(SolverKind solverKind)
One technical optimization backend. A backend is not a scientific solution method.
SolverKind
Identifies a supported mathematical optimization solver.
Definition SolverKind.cs:12