LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
SmallBucketSchedulingFormulation.cs
Go to the documentation of this file.
1using LotSizingDataModel.Instance;
3
5
6/// <summary>
7/// Solver-independent executable MILP formulation for one canonical
8/// small-bucket scheduling family.
9/// </summary>
12{
13 public const string DlspFormulationId =
14 "small-bucket-dlsp";
15
16 public const string CslpFormulationId =
17 "small-bucket-cslp";
18
19 public const string PlspFormulationId =
20 "small-bucket-plsp";
21
22 private readonly SmallBucketSchedulingFormulationKind _kind;
23 private readonly IStandardLotSizingVariableBuilder _variableBuilder;
24 private readonly IStandardLotSizingObjectiveBuilder _objectiveBuilder;
25 private readonly IStandardLotSizingConstraintBuilder _constraintBuilder;
26 private readonly StandardLotSizingFormulationOptions _options;
28 _applicabilityService;
29
37 {
38 _kind = kind;
39 _variableBuilder =
40 variableBuilder ??
41 throw new ArgumentNullException(nameof(variableBuilder));
42 _objectiveBuilder =
43 objectiveBuilder ??
44 throw new ArgumentNullException(nameof(objectiveBuilder));
45 _constraintBuilder =
46 constraintBuilder ??
47 throw new ArgumentNullException(nameof(constraintBuilder));
48 _options =
49 options?.Clone() ??
50 throw new ArgumentNullException(nameof(options));
51 _applicabilityService =
52 applicabilityService ??
53 throw new ArgumentNullException(nameof(applicabilityService));
54
55 _options.EnsureValid();
56 }
57
59 _kind;
60
61 public override string FormulationId =>
62 _kind switch
63 {
66
69
72
73 _ =>
74 throw new InvalidOperationException(
75 "Unknown small-bucket formulation kind.")
76 };
77
78 public override string Name =>
79 _kind switch
80 {
82 "DLSP small-bucket MILP formulation",
83
85 "CSLP small-bucket MILP formulation",
86
88 "PLSP small-bucket MILP formulation",
89
90 _ =>
91 throw new InvalidOperationException(
92 "Unknown small-bucket formulation kind.")
93 };
94
95 public override string Description =>
96 "Solver-independent single-resource small-bucket scheduling " +
97 "formulation with persistent setup state and setup-start cost.";
98
99 public override bool CanBuild(
100 LotSizingInstance instance) =>
101 _applicabilityService.CanBuild(
102 instance,
103 _kind);
104
105 protected override string CreateModelName(
106 LotSizingInstance instance) =>
107 string.IsNullOrWhiteSpace(instance.Name)
109 : $"{instance.Name.Trim()} - {FormulationId}";
110
111 protected override ValueTask BuildVariablesAsync(
112 LotSizingInstance instance,
114 CancellationToken cancellationToken) =>
115 _variableBuilder.BuildAsync(
116 instance,
117 context,
118 _options,
119 cancellationToken);
120
121 protected override ValueTask BuildObjectiveAsync(
122 LotSizingInstance instance,
124 CancellationToken cancellationToken) =>
125 _objectiveBuilder.BuildAsync(
126 instance,
127 context,
128 _options,
129 cancellationToken);
130
131 protected override ValueTask BuildConstraintsAsync(
132 LotSizingInstance instance,
134 CancellationToken cancellationToken) =>
135 _constraintBuilder.BuildAsync(
136 instance,
137 context,
138 _options,
139 cancellationToken);
140}
Provides the shared state required while constructing a solver-independent mathematical model.
Provides a reusable base implementation for solver-independent lot-sizing formulations.
override bool CanBuild(LotSizingInstance instance)
Determines whether the formulation supports a lot-sizing instance.
override ValueTask BuildConstraintsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, CancellationToken cancellationToken)
override ValueTask BuildObjectiveAsync(LotSizingInstance instance, MathematicalModelBuildContext context, CancellationToken cancellationToken)
SmallBucketSchedulingFormulation(SmallBucketSchedulingFormulationKind kind, IStandardLotSizingVariableBuilder variableBuilder, IStandardLotSizingObjectiveBuilder objectiveBuilder, IStandardLotSizingConstraintBuilder constraintBuilder, StandardLotSizingFormulationOptions options, SmallBucketSchedulingApplicabilityService applicabilityService)
override string CreateModelName(LotSizingInstance instance)
Creates the mathematical model name.
override ValueTask BuildVariablesAsync(LotSizingInstance instance, MathematicalModelBuildContext context, CancellationToken cancellationToken)
Configures the standard solver-independent mixed-integer lot-sizing formulation.
StandardLotSizingFormulationOptions Clone()
Creates an independent copy.
Defines the constraint-construction component used by the standard solver-independent lot-sizing form...
Defines the objective-construction component used by the standard solver-independent lot-sizing formu...
Defines the variable-construction component used by the standard solver-independent lot-sizing formul...
SmallBucketSchedulingFormulationKind
Executable small-bucket scheduling formulation variants.