LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
MathematicalFormulationScientificCatalog.cs
Go to the documentation of this file.
1using LotSizingDataModel.Core.DecisionModel.Objectives;
2using LotSizingDataModel.Instance.ProblemClasses;
3
5
6/// <summary>
7/// Scientific capability profiles for existing mathematical formulations.
8/// </summary>
10{
11 private static readonly LotSizingProblemClassExtensionKind[]
12 SmallBucketKnownUnsupportedExtensions =
13 new[]
14 {
15 LotSizingProblemClassExtensionKind.ProductionLeadTimes,
16 LotSizingProblemClassExtensionKind.MinimumLotSize,
17 LotSizingProblemClassExtensionKind.MaximumLotSize,
18 LotSizingProblemClassExtensionKind.LotSizeMultiple,
19 LotSizingProblemClassExtensionKind.MultiSite,
20 LotSizingProblemClassExtensionKind.MultipleObjectives,
21 LotSizingProblemClassExtensionKind.BigBucketScheduling,
22 LotSizingProblemClassExtensionKind.MacroMicroScheduling,
23 LotSizingProblemClassExtensionKind.SequenceDependentChangeoverTimes,
24 LotSizingProblemClassExtensionKind.SequenceDependentChangeoverCosts
25 };
26
27
29 new(
30 formulationId:
32 formulationFamily:
33 "Standard solver-independent MILP",
34 supportedProblemClasses:
35 new[]
36 {
37 CanonicalLotSizingProblemClassId
38 .SingleItemUncapacitatedLotSizing,
39 CanonicalLotSizingProblemClassId
40 .SingleItemCapacitatedLotSizing,
41 CanonicalLotSizingProblemClassId
42 .MultiItemUncapacitatedLotSizing,
43 CanonicalLotSizingProblemClassId
44 .MultiItemCapacitatedLotSizing,
45 CanonicalLotSizingProblemClassId
46 .UncapacitatedMultiLevelLotSizing,
47 CanonicalLotSizingProblemClassId
48 .MultiLevelCapacitatedLotSizing
49 },
50 supportedExtensions:
51 new[]
52 {
53 LotSizingProblemClassExtensionKind.InitialInventory,
54 LotSizingProblemClassExtensionKind.StartUpCosts,
55 LotSizingProblemClassExtensionKind.SafetyStock,
56 LotSizingProblemClassExtensionKind.Backlogging,
57 LotSizingProblemClassExtensionKind.SetupTimes,
58 LotSizingProblemClassExtensionKind.ProductionLeadTimes,
59 LotSizingProblemClassExtensionKind.MinimumLotSize,
60 LotSizingProblemClassExtensionKind.MaximumLotSize,
61 LotSizingProblemClassExtensionKind.LotSizeMultiple,
62 LotSizingProblemClassExtensionKind
63 .AdditionalProductionCapacity,
64 LotSizingProblemClassExtensionKind
65 .AdditionalWarehouseCapacity,
66 LotSizingProblemClassExtensionKind
67 .AdditionalTransportCapacity,
68 LotSizingProblemClassExtensionKind.Purchasing,
69 LotSizingProblemClassExtensionKind.SupplierCapacity,
70 LotSizingProblemClassExtensionKind.SupplierLeadTime,
71 LotSizingProblemClassExtensionKind.Transportation,
72 LotSizingProblemClassExtensionKind.TransportCapacity,
73 LotSizingProblemClassExtensionKind.TransportLeadTime,
74 LotSizingProblemClassExtensionKind.Distribution,
75 LotSizingProblemClassExtensionKind.WarehouseCapacity,
76 LotSizingProblemClassExtensionKind.MultiSite,
77 LotSizingProblemClassExtensionKind.FinancialConstraints,
78 LotSizingProblemClassExtensionKind.GroupingConstraint
79 },
80 knownUnsupportedExtensions:
81 new[]
82 {
83 LotSizingProblemClassExtensionKind.StartUpTimes,
84 LotSizingProblemClassExtensionKind.MultipleObjectives,
85 LotSizingProblemClassExtensionKind.IntegratedScheduling,
86 LotSizingProblemClassExtensionKind.BigBucketScheduling,
87 LotSizingProblemClassExtensionKind.SmallBucketScheduling,
88 LotSizingProblemClassExtensionKind.MacroMicroScheduling,
89 LotSizingProblemClassExtensionKind.InitialSetupState,
90 LotSizingProblemClassExtensionKind.SetupCarryOver,
91 LotSizingProblemClassExtensionKind
92 .SequenceDependentChangeoverTimes,
93 LotSizingProblemClassExtensionKind
94 .SequenceDependentChangeoverCosts,
95 LotSizingProblemClassExtensionKind.MaximumSetupCount
96 },
97 supportedObjectiveKinds:
98 new[]
99 {
100 OptimizationObjectiveKind.Economic
101 },
102 evidence:
103 new[]
104 {
105 "StandardLotSizingFormulationFactory variable/objective/" +
106 "constraint builder registry",
107 "InventoryBalanceConstraintFamilyBuilder lead-time and " +
108 "initial-inventory semantics",
109 "WorkCenterCapacityConstraintFamilyBuilder setup-time " +
110 "semantics",
111 "SafetyStockConstraintFamilyBuilder",
112 "BacklogVariableFamilyBuilder",
113 "MinimumLotSizeConstraintFamilyBuilder",
114 "MaximumLotSizeConstraintFamilyBuilder",
115 "LotSizeMultipleConstraintFamilyBuilder",
116 "ProcurementVariableFamilyBuilder",
117 "SupplierCapacityConstraintFamilyBuilder",
118 "TransportVariableFamilyBuilder",
119 "WarehouseCapacityConstraintFamilyBuilder",
120 "PeriodicOperatingExpenditureBudgetConstraintFamilyBuilder",
121 "ProductionStartUpVariableFamilyBuilder",
122 "ProductionStartUpDefinitionConstraintFamilyBuilder",
123 "ProductionStartUpCostObjectiveTermBuilder"
124 });
125
126 public static MathematicalFormulationScientificProfile
128 new(
129 formulationId:
131 formulationFamily:
132 "Executable single-resource DLSP small-bucket MILP",
133 supportedProblemClasses:
134 new[]
135 {
136 CanonicalLotSizingProblemClassId
137 .DiscreteLotSizingAndScheduling
138 },
139 supportedExtensions:
140 new[]
141 {
142 LotSizingProblemClassExtensionKind.InitialInventory,
143 LotSizingProblemClassExtensionKind.StartUpCosts,
144 LotSizingProblemClassExtensionKind.SafetyStock,
145 LotSizingProblemClassExtensionKind.Backlogging,
146 LotSizingProblemClassExtensionKind
147 .AdditionalWarehouseCapacity,
148 LotSizingProblemClassExtensionKind
149 .AdditionalTransportCapacity,
150 LotSizingProblemClassExtensionKind.Purchasing,
151 LotSizingProblemClassExtensionKind.SupplierCapacity,
152 LotSizingProblemClassExtensionKind.SupplierLeadTime,
153 LotSizingProblemClassExtensionKind.Transportation,
154 LotSizingProblemClassExtensionKind.TransportCapacity,
155 LotSizingProblemClassExtensionKind.TransportLeadTime,
156 LotSizingProblemClassExtensionKind.Distribution,
157 LotSizingProblemClassExtensionKind.WarehouseCapacity,
158 LotSizingProblemClassExtensionKind.FinancialConstraints,
159 LotSizingProblemClassExtensionKind.SetupCarryOver,
160 LotSizingProblemClassExtensionKind.InitialSetupState,
161 LotSizingProblemClassExtensionKind.MaximumSetupCount,
162 LotSizingProblemClassExtensionKind.GroupingConstraint,
163 LotSizingProblemClassExtensionKind.SetupCarryOverForbidden
164 },
165 knownUnsupportedExtensions:
166 SmallBucketKnownUnsupportedExtensions
167 .Concat(new[]
168 {
169 LotSizingProblemClassExtensionKind.StartUpTimes,
170 LotSizingProblemClassExtensionKind.SetupTimes,
171 LotSizingProblemClassExtensionKind.AdditionalProductionCapacity
172 })
173 .ToArray(),
174 supportedObjectiveKinds:
175 new[]
176 {
177 OptimizationObjectiveKind.Economic
178 },
179 evidence:
180 new[]
181 {
182 "SmallBucketSetupStateVariableFamilyBuilder",
183 "SmallBucketProductionActivationVariableFamilyBuilder",
184 "SmallBucketSetupStartVariableFamilyBuilder",
185 "SmallBucketSingleSetupStateConstraintFamilyBuilder",
186 "SmallBucketSetupStartDefinitionConstraintFamilyBuilder",
187 "SmallBucketSchedulingCapacityConstraintFamilyBuilder",
188 "SmallBucketSetupCountConstraintFamilyBuilder",
189 "SmallBucketGroupingConstraintFamilyBuilder",
190 "SmallBucketProductionStateConstraintFamilyBuilder",
191 "SmallBucketProducedItemCountConstraintFamilyBuilder",
192 "SmallBucketSetupStartCostObjectiveTermBuilder",
193 "SmallBucketStartUpVariableFamilyBuilder",
194 "SmallBucketStartUpDefinitionConstraintFamilyBuilder",
195 "SmallBucketStartUpCostObjectiveTermBuilder"
196 });
197
198 public static MathematicalFormulationScientificProfile
200 new(
201 formulationId:
203 formulationFamily:
204 "Executable single-resource CSLP small-bucket MILP",
205 supportedProblemClasses:
206 new[]
207 {
208 CanonicalLotSizingProblemClassId
209 .ContinuousSetupLotSizing
210 },
211 supportedExtensions:
212 new[]
213 {
214 LotSizingProblemClassExtensionKind.InitialInventory,
215 LotSizingProblemClassExtensionKind.StartUpCosts,
216 LotSizingProblemClassExtensionKind.StartUpTimes,
217 LotSizingProblemClassExtensionKind.SafetyStock,
218 LotSizingProblemClassExtensionKind.Backlogging,
219 LotSizingProblemClassExtensionKind
220 .AdditionalWarehouseCapacity,
221 LotSizingProblemClassExtensionKind
222 .AdditionalTransportCapacity,
223 LotSizingProblemClassExtensionKind.Purchasing,
224 LotSizingProblemClassExtensionKind.SupplierCapacity,
225 LotSizingProblemClassExtensionKind.SupplierLeadTime,
226 LotSizingProblemClassExtensionKind.Transportation,
227 LotSizingProblemClassExtensionKind.TransportCapacity,
228 LotSizingProblemClassExtensionKind.TransportLeadTime,
229 LotSizingProblemClassExtensionKind.Distribution,
230 LotSizingProblemClassExtensionKind.WarehouseCapacity,
231 LotSizingProblemClassExtensionKind.FinancialConstraints,
232 LotSizingProblemClassExtensionKind.SetupCarryOver,
233 LotSizingProblemClassExtensionKind.SetupTimes,
234 LotSizingProblemClassExtensionKind.AdditionalProductionCapacity,
235 LotSizingProblemClassExtensionKind.InitialSetupState,
236 LotSizingProblemClassExtensionKind.MaximumSetupCount,
237 LotSizingProblemClassExtensionKind.GroupingConstraint,
238 LotSizingProblemClassExtensionKind.SetupCarryOverForbidden
239 },
240 knownUnsupportedExtensions:
241 SmallBucketKnownUnsupportedExtensions,
242 supportedObjectiveKinds:
243 new[]
244 {
245 OptimizationObjectiveKind.Economic
246 },
247 evidence:
248 new[]
249 {
250 "SmallBucketSetupStateVariableFamilyBuilder",
251 "SmallBucketSetupStartVariableFamilyBuilder",
252 "SmallBucketSingleSetupStateConstraintFamilyBuilder",
253 "SmallBucketSetupStartDefinitionConstraintFamilyBuilder",
254 "SmallBucketSchedulingCapacityConstraintFamilyBuilder",
255 "SmallBucketSetupCountConstraintFamilyBuilder",
256 "SmallBucketGroupingConstraintFamilyBuilder",
257 "SmallBucketProductionStateConstraintFamilyBuilder",
258 "SmallBucketProducedItemCountConstraintFamilyBuilder",
259 "SmallBucketSetupStartCostObjectiveTermBuilder",
260 "SmallBucketStartUpVariableFamilyBuilder",
261 "SmallBucketStartUpDefinitionConstraintFamilyBuilder",
262 "SmallBucketStartUpCostObjectiveTermBuilder"
263 });
264
265 public static MathematicalFormulationScientificProfile
267 new(
268 formulationId:
270 formulationFamily:
271 "Executable single-resource PLSP small-bucket MILP",
272 supportedProblemClasses:
273 new[]
274 {
275 CanonicalLotSizingProblemClassId
276 .ProportionalLotSizingAndScheduling
277 },
278 supportedExtensions:
279 new[]
280 {
281 LotSizingProblemClassExtensionKind.InitialInventory,
282 LotSizingProblemClassExtensionKind.StartUpCosts,
283 LotSizingProblemClassExtensionKind.StartUpTimes,
284 LotSizingProblemClassExtensionKind.SafetyStock,
285 LotSizingProblemClassExtensionKind.Backlogging,
286 LotSizingProblemClassExtensionKind
287 .AdditionalWarehouseCapacity,
288 LotSizingProblemClassExtensionKind
289 .AdditionalTransportCapacity,
290 LotSizingProblemClassExtensionKind.Purchasing,
291 LotSizingProblemClassExtensionKind.SupplierCapacity,
292 LotSizingProblemClassExtensionKind.SupplierLeadTime,
293 LotSizingProblemClassExtensionKind.Transportation,
294 LotSizingProblemClassExtensionKind.TransportCapacity,
295 LotSizingProblemClassExtensionKind.TransportLeadTime,
296 LotSizingProblemClassExtensionKind.Distribution,
297 LotSizingProblemClassExtensionKind.WarehouseCapacity,
298 LotSizingProblemClassExtensionKind.FinancialConstraints,
299 LotSizingProblemClassExtensionKind.SetupCarryOver,
300 LotSizingProblemClassExtensionKind.SetupTimes,
301 LotSizingProblemClassExtensionKind.AdditionalProductionCapacity,
302 LotSizingProblemClassExtensionKind.InitialSetupState,
303 LotSizingProblemClassExtensionKind.GroupingConstraint
304 },
305 knownUnsupportedExtensions:
306 SmallBucketKnownUnsupportedExtensions
307 .Concat(new[]
308 {
309 LotSizingProblemClassExtensionKind.SetupCarryOverForbidden
310 })
311 .ToArray(),
312 supportedObjectiveKinds:
313 new[]
314 {
315 OptimizationObjectiveKind.Economic
316 },
317 evidence:
318 new[]
319 {
320 "SmallBucketSetupStateVariableFamilyBuilder",
321 "SmallBucketProductionActivationVariableFamilyBuilder",
322 "SmallBucketSetupStartVariableFamilyBuilder",
323 "PlspSingleSetupStateConstraintFamilyBuilder",
324 "SmallBucketSetupStartDefinitionConstraintFamilyBuilder",
325 "SmallBucketSchedulingCapacityConstraintFamilyBuilder",
326 "SmallBucketSetupCountConstraintFamilyBuilder",
327 "SmallBucketGroupingConstraintFamilyBuilder",
328 "SmallBucketProductionStateConstraintFamilyBuilder",
329 "SmallBucketProducedItemCountConstraintFamilyBuilder",
330 "PlspSetupTransitionLimitConstraintFamilyBuilder",
331 "SmallBucketSetupStartCostObjectiveTermBuilder",
332 "SmallBucketStartUpVariableFamilyBuilder",
333 "SmallBucketStartUpDefinitionConstraintFamilyBuilder",
334 "SmallBucketStartUpCostObjectiveTermBuilder"
335 });
336
337 public static MathematicalFormulationScientificProfile
338 GlspMacroMicro { get; } =
339 new(
340 formulationId:
342 formulationFamily:
343 "Executable single-resource GLSP macro/micro MILP",
344 supportedProblemClasses:
345 new[]
346 {
347 CanonicalLotSizingProblemClassId
348 .GeneralLotSizingAndScheduling
349 },
350 supportedExtensions:
351 new[]
352 {
353 LotSizingProblemClassExtensionKind.InitialInventory,
354 LotSizingProblemClassExtensionKind.SafetyStock,
355 LotSizingProblemClassExtensionKind.Backlogging,
356 LotSizingProblemClassExtensionKind.AdditionalWarehouseCapacity,
357 LotSizingProblemClassExtensionKind.AdditionalTransportCapacity,
358 LotSizingProblemClassExtensionKind.Purchasing,
359 LotSizingProblemClassExtensionKind.SupplierCapacity,
360 LotSizingProblemClassExtensionKind.SupplierLeadTime,
361 LotSizingProblemClassExtensionKind.Transportation,
362 LotSizingProblemClassExtensionKind.TransportCapacity,
363 LotSizingProblemClassExtensionKind.TransportLeadTime,
364 LotSizingProblemClassExtensionKind.Distribution,
365 LotSizingProblemClassExtensionKind.WarehouseCapacity,
366 LotSizingProblemClassExtensionKind.ProductionLeadTimes,
367 LotSizingProblemClassExtensionKind.SetupCarryOver,
368 LotSizingProblemClassExtensionKind.SequenceDependentChangeoverTimes,
369 LotSizingProblemClassExtensionKind.SequenceDependentChangeoverCosts,
370 LotSizingProblemClassExtensionKind.SetupTimes,
371 LotSizingProblemClassExtensionKind.AdditionalProductionCapacity,
372 LotSizingProblemClassExtensionKind.InitialSetupState,
373 LotSizingProblemClassExtensionKind.MaximumSetupCount,
374 LotSizingProblemClassExtensionKind.MaximumProducedItemCount,
375 LotSizingProblemClassExtensionKind.GroupingConstraint,
376 LotSizingProblemClassExtensionKind.SetupCarryOverForbidden
377 },
378 knownUnsupportedExtensions:
379 new[]
380 {
381
382 LotSizingProblemClassExtensionKind.StartUpCosts,
383 LotSizingProblemClassExtensionKind.StartUpTimes,
384 LotSizingProblemClassExtensionKind.MinimumLotSize,
385 LotSizingProblemClassExtensionKind.MaximumLotSize,
386 LotSizingProblemClassExtensionKind.LotSizeMultiple,
387
388 LotSizingProblemClassExtensionKind.MultiSite,
389 LotSizingProblemClassExtensionKind.MultipleObjectives,
390 LotSizingProblemClassExtensionKind.FinancialConstraints,
391 LotSizingProblemClassExtensionKind.BigBucketScheduling,
392 LotSizingProblemClassExtensionKind.SmallBucketScheduling,
393
394 },
395 supportedObjectiveKinds:
396 new[]
397 {
398 OptimizationObjectiveKind.Economic
399 },
400 evidence:
401 new[]
402 {
403 "GlspMicroProductionVariableFamilyBuilder",
404 "GlspMicroSetupStateVariableFamilyBuilder",
405 "GlspChangeoverVariableFamilyBuilder",
406 "GlspAggregateProductionConstraintFamilyBuilder",
407 "GlspSingleSetupStateConstraintFamilyBuilder",
408 "GlspMicroProductionLinkConstraintFamilyBuilder",
409 "GlspChangeoverDefinitionConstraintFamilyBuilder",
410 "GlspSetupStartVariableFamilyBuilder",
411 "GlspSetupStartDefinitionConstraintFamilyBuilder",
412 "GlspSetupStartCostObjectiveTermBuilder",
413 "GlspStartUpVariableFamilyBuilder",
414 "GlspStartUpDefinitionConstraintFamilyBuilder",
415 "GlspStartUpCostObjectiveTermBuilder",
416 "GlspSetupCountConstraintFamilyBuilder",
417 "GlspGroupingConstraintFamilyBuilder",
418 "GlspProducedItemCountConstraintFamilyBuilder",
419 "GlspMacroCapacityConstraintFamilyBuilder",
420 "GlspChangeoverCostObjectiveTermBuilder",
421 "GlspMicroPeriodSetupStateDecisionMapper",
422 "MathematicalSolutionValueProjector"
423 });
424
425 public static IReadOnlyList<MathematicalFormulationScientificProfile>
426 All { get; } =
427 new[]
428 {
429 Standard,
434 };
435
436 public static bool TryGet(
437 string formulationId,
439 {
440 profile =
441 All.FirstOrDefault(
442 candidate =>
443 candidate.FormulationId.Equals(
444 formulationId?.Trim(),
445 StringComparison.OrdinalIgnoreCase));
446
447 return profile is not null;
448 }
449
451 string formulationId)
452 {
453 TryGet(formulationId, out var profile);
454 return profile;
455 }
456}
static bool TryGet(string formulationId, out MathematicalFormulationScientificProfile? profile)
Solver-independent executable MILP formulation for one canonical small-bucket scheduling family.
Provides the standard solver-independent mixed-integer lot-sizing formulation.
const string StandardFormulationId
Canonical identifier of the standard lot-sizing formulation.