LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
ScientificSolutionMethodCatalog.cs
Go to the documentation of this file.
1using LotSizingDataModel.Instance.ProblemClasses;
2
4
5/// <summary>
6/// Scientific solution-method families relevant to the current lot-sizing
7/// catalog.
8/// </summary>
9/// <remarks>
10/// CatalogOnly does not mean every named algorithm in a family supports every
11/// extension. A future concrete algorithm adapter must declare its own exact
12/// applicability before becoming executable.
13/// </remarks>
15{
16 private static readonly CanonicalLotSizingProblemClassId[]
17 AllExecutableCoreClasses =
18 new[]
19 {
20 CanonicalLotSizingProblemClassId
21 .SingleItemUncapacitatedLotSizing,
22 CanonicalLotSizingProblemClassId
23 .SingleItemCapacitatedLotSizing,
24 CanonicalLotSizingProblemClassId
25 .MultiItemUncapacitatedLotSizing,
26 CanonicalLotSizingProblemClassId
27 .MultiItemCapacitatedLotSizing,
28 CanonicalLotSizingProblemClassId
29 .UncapacitatedMultiLevelLotSizing,
30 CanonicalLotSizingProblemClassId
31 .MultiLevelCapacitatedLotSizing
32 };
33
34 private static readonly CanonicalLotSizingProblemClassId[]
35 GeneralMilpProblemClasses =
36 AllExecutableCoreClasses
37 .Concat(
38 new[]
39 {
40 CanonicalLotSizingProblemClassId
41 .DiscreteLotSizingAndScheduling,
42 CanonicalLotSizingProblemClassId
43 .ContinuousSetupLotSizing,
44 CanonicalLotSizingProblemClassId
45 .ProportionalLotSizingAndScheduling,
46 CanonicalLotSizingProblemClassId
47 .GeneralLotSizingAndScheduling
48 })
49 .ToArray();
50
52 new(
53 methodId: "MILP-GENERAL",
54 name: "General mixed-integer linear programming",
55 category:
57 .MixedIntegerLinearProgramming,
58 supportLevel:
60 applicableProblemClasses:
61 GeneralMilpProblemClasses,
62 requiresMathematicalFormulation:
63 true,
64 requiresMilpBackend:
65 true,
66 evidence:
67 new[]
68 {
69 "Current solver-independent mathematical formulation stack",
70 "CPLEX/Gurobi/Xpress/COIN-OR CBC adapter architecture"
71 },
72 note:
73 "The only solution-method family currently connected " +
74 "end-to-end in LotSizingDataModel.");
75
76 public static ScientificSolutionMethodDefinition
78 new(
79 methodId: "DP-SI-ULS",
80 name: "Specialized dynamic programming",
81 category:
82 ScientificSolutionMethodCategory.DynamicProgramming,
83 supportLevel:
85 applicableProblemClasses:
86 new[]
87 {
88 CanonicalLotSizingProblemClassId
89 .SingleItemUncapacitatedLotSizing
90 },
91 requiresMathematicalFormulation:
92 false,
93 requiresMilpBackend:
94 false,
95 evidence:
96 new[]
97 {
98 "Classical and survey literature on single-item " +
99 "uncapacitated lot sizing"
100 },
101 note:
102 "Future concrete ULSAlgorithm adapters must declare " +
103 "their exact cost/extension assumptions.");
104
105 public static ScientificSolutionMethodDefinition
107 new(
108 methodId: "SP-SI-ULS",
109 name: "Shortest-path / network exact method",
110 category:
111 ScientificSolutionMethodCategory.ShortestPathNetwork,
112 supportLevel:
114 applicableProblemClasses:
115 new[]
116 {
117 CanonicalLotSizingProblemClassId
118 .SingleItemUncapacitatedLotSizing
119 },
120 requiresMathematicalFormulation:
121 false,
122 requiresMilpBackend:
123 false,
124 evidence:
125 new[]
126 {
127 "Classical network formulations of single-item " +
128 "uncapacitated lot sizing"
129 });
130
131 public static ScientificSolutionMethodDefinition
133 new(
134 methodId: "LR-CLSP",
135 name: "Lagrangian relaxation",
136 category:
137 ScientificSolutionMethodCategory.LagrangianRelaxation,
138 supportLevel:
140 applicableProblemClasses:
141 new[]
142 {
143 CanonicalLotSizingProblemClassId
144 .MultiItemCapacitatedLotSizing,
145 CanonicalLotSizingProblemClassId
146 .MultiLevelCapacitatedLotSizing
147 },
148 requiresMathematicalFormulation:
149 false,
150 requiresMilpBackend:
151 false,
152 evidence:
153 new[]
154 {
155 "Capacitated dynamic lot-sizing solution literature"
156 });
157
158 public static ScientificSolutionMethodDefinition
160 new(
161 methodId: "DW-BP-CLSP",
162 name: "Dantzig-Wolfe decomposition / branch-and-price",
163 category:
165 .DantzigWolfeBranchAndPrice,
166 supportLevel:
168 applicableProblemClasses:
169 new[]
170 {
171 CanonicalLotSizingProblemClassId
172 .MultiItemCapacitatedLotSizing
173 },
174 requiresMathematicalFormulation:
175 true,
176 requiresMilpBackend:
177 true,
178 evidence:
179 new[]
180 {
181 "Branch-and-price literature for capacitated lot " +
182 "sizing with setup times"
183 });
184
185 public static ScientificSolutionMethodDefinition
187 new(
188 methodId: "HEURISTIC-GENERAL",
189 name: "Dedicated constructive/improvement heuristic",
190 category:
191 ScientificSolutionMethodCategory.ConstructiveHeuristic,
192 supportLevel:
194 applicableProblemClasses:
195 AllExecutableCoreClasses,
196 requiresMathematicalFormulation:
197 false,
198 requiresMilpBackend:
199 false,
200 note:
201 "Family-level catalog entry only; concrete heuristic " +
202 "adapters will own exact applicability.");
203
205 Metaheuristic { get; } =
206 new(
207 methodId: "METAHEURISTIC-GENERAL",
208 name: "Metaheuristic",
209 category:
211 supportLevel:
213 applicableProblemClasses:
214 AllExecutableCoreClasses,
215 requiresMathematicalFormulation:
216 false,
217 requiresMilpBackend:
218 false,
219 evidence:
220 new[]
221 {
222 "Dynamic lot-sizing metaheuristics review literature"
223 },
224 note:
225 "Future MetaheuristicsPlatform adapters must declare " +
226 "representation, evaluation and exact applicability.");
227
228 public static ScientificSolutionMethodDefinition
229 Matheuristic { get; } =
230 new(
231 methodId: "MATHEURISTIC-GENERAL",
232 name: "Matheuristic / MILP-based hybrid",
233 category:
235 supportLevel:
237 applicableProblemClasses:
238 AllExecutableCoreClasses,
239 requiresMathematicalFormulation:
240 true,
241 requiresMilpBackend:
242 true,
243 note:
244 "Catalogued for future solver/metaheuristic integration.");
245
246 public static IReadOnlyList<ScientificSolutionMethodDefinition>
259
260 public static IReadOnlyList<ScientificSolutionMethodDefinition>
262 All
263 .Where(
264 method =>
265 method.SupportLevel ==
267 .ToArray();
268
270 string methodId)
271 {
272 if (string.IsNullOrWhiteSpace(methodId))
273 {
274 return null;
275 }
276
277 return All.FirstOrDefault(
278 method =>
279 method.MethodId.Equals(
280 methodId.Trim(),
281 StringComparison.OrdinalIgnoreCase));
282 }
283}
Scientific solution-method families relevant to the current lot-sizing catalog.
ScientificSolutionMethodSupportLevel
Current implementation support of one scientific solution-method family.
ScientificSolutionMethodCategory
Orthogonal algorithmic solution-method categories.