16 private static readonly CanonicalLotSizingProblemClassId[]
17 AllExecutableCoreClasses =
20 CanonicalLotSizingProblemClassId
21 .SingleItemUncapacitatedLotSizing,
22 CanonicalLotSizingProblemClassId
23 .SingleItemCapacitatedLotSizing,
24 CanonicalLotSizingProblemClassId
25 .MultiItemUncapacitatedLotSizing,
26 CanonicalLotSizingProblemClassId
27 .MultiItemCapacitatedLotSizing,
28 CanonicalLotSizingProblemClassId
29 .UncapacitatedMultiLevelLotSizing,
30 CanonicalLotSizingProblemClassId
31 .MultiLevelCapacitatedLotSizing
34 private static readonly CanonicalLotSizingProblemClassId[]
35 GeneralMilpProblemClasses =
36 AllExecutableCoreClasses
40 CanonicalLotSizingProblemClassId
41 .DiscreteLotSizingAndScheduling,
42 CanonicalLotSizingProblemClassId
43 .ContinuousSetupLotSizing,
44 CanonicalLotSizingProblemClassId
45 .ProportionalLotSizingAndScheduling,
46 CanonicalLotSizingProblemClassId
47 .GeneralLotSizingAndScheduling
53 methodId:
"MILP-GENERAL",
54 name:
"General mixed-integer linear programming",
57 .MixedIntegerLinearProgramming,
60 applicableProblemClasses:
61 GeneralMilpProblemClasses,
62 requiresMathematicalFormulation:
69 "Current solver-independent mathematical formulation stack",
70 "CPLEX/Gurobi/Xpress/COIN-OR CBC adapter architecture"
73 "The only solution-method family currently connected " +
74 "end-to-end in LotSizingDataModel.");
76 public static ScientificSolutionMethodDefinition
79 methodId:
"DP-SI-ULS",
80 name:
"Specialized dynamic programming",
85 applicableProblemClasses:
88 CanonicalLotSizingProblemClassId
89 .SingleItemUncapacitatedLotSizing
91 requiresMathematicalFormulation:
98 "Classical and survey literature on single-item " +
99 "uncapacitated lot sizing"
102 "Future concrete ULSAlgorithm adapters must declare " +
103 "their exact cost/extension assumptions.");
105 public static ScientificSolutionMethodDefinition
108 methodId:
"SP-SI-ULS",
109 name:
"Shortest-path / network exact method",
114 applicableProblemClasses:
117 CanonicalLotSizingProblemClassId
118 .SingleItemUncapacitatedLotSizing
120 requiresMathematicalFormulation:
127 "Classical network formulations of single-item " +
128 "uncapacitated lot sizing"
131 public static ScientificSolutionMethodDefinition
135 name:
"Lagrangian relaxation",
140 applicableProblemClasses:
143 CanonicalLotSizingProblemClassId
144 .MultiItemCapacitatedLotSizing,
145 CanonicalLotSizingProblemClassId
146 .MultiLevelCapacitatedLotSizing
148 requiresMathematicalFormulation:
155 "Capacitated dynamic lot-sizing solution literature"
158 public static ScientificSolutionMethodDefinition
161 methodId:
"DW-BP-CLSP",
162 name:
"Dantzig-Wolfe decomposition / branch-and-price",
165 .DantzigWolfeBranchAndPrice,
168 applicableProblemClasses:
171 CanonicalLotSizingProblemClassId
172 .MultiItemCapacitatedLotSizing
174 requiresMathematicalFormulation:
181 "Branch-and-price literature for capacitated lot " +
182 "sizing with setup times"
185 public static ScientificSolutionMethodDefinition
188 methodId:
"HEURISTIC-GENERAL",
189 name:
"Dedicated constructive/improvement heuristic",
194 applicableProblemClasses:
195 AllExecutableCoreClasses,
196 requiresMathematicalFormulation:
201 "Family-level catalog entry only; concrete heuristic " +
202 "adapters will own exact applicability.");
207 methodId:
"METAHEURISTIC-GENERAL",
208 name:
"Metaheuristic",
213 applicableProblemClasses:
214 AllExecutableCoreClasses,
215 requiresMathematicalFormulation:
222 "Dynamic lot-sizing metaheuristics review literature"
225 "Future MetaheuristicsPlatform adapters must declare " +
226 "representation, evaluation and exact applicability.");
228 public static ScientificSolutionMethodDefinition
231 methodId:
"MATHEURISTIC-GENERAL",
232 name:
"Matheuristic / MILP-based hybrid",
237 applicableProblemClasses:
238 AllExecutableCoreClasses,
239 requiresMathematicalFormulation:
244 "Catalogued for future solver/metaheuristic integration.");
246 public static IReadOnlyList<ScientificSolutionMethodDefinition>
260 public static IReadOnlyList<ScientificSolutionMethodDefinition>
265 method.SupportLevel ==
272 if (
string.IsNullOrWhiteSpace(methodId))
277 return All.FirstOrDefault(
279 method.MethodId.Equals(
281 StringComparison.OrdinalIgnoreCase));