LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
GlspAggregateProductionConstraintFamilyBuilder.cs
Go to the documentation of this file.
1using LotSizingDataModel.Core.Relationships;
2using LotSizingDataModel.Instance;
5
7
10{
11 public override string ConstraintFamilyId => "glspAggregateProduction";
12
13 protected override ValueTask BuildConstraintsAsync(
14 LotSizingInstance instance,
17 CancellationToken cancellationToken)
18 {
19 (int plantId, var workCenter, var profile) =
21 IReadOnlyList<ProductionRouting> routings =
22 GlspSchedulingData.GetRoutings(instance, plantId, workCenter.Id);
23
24 for (int period = 1; period <= instance.PlanningHorizon; period++)
25 {
26 var microPeriods = profile.EnumerateMicroPeriods()
27 .Where(micro => micro.MacroPeriod == period)
28 .ToArray();
29
30 foreach (ProductionRouting routing in routings)
31 {
32 cancellationToken.ThrowIfCancellationRequested();
33 var expression = new LinearExpressionBuilder()
34 .Add(GetVariable(context,
36
37 foreach (var microPeriod in microPeriods)
38 {
39 expression.Subtract(GetVariable(context,
41 plantId, workCenter.Id, routing.Id, routing.ItemId, microPeriod)));
42 }
43
45 context,
46 $"glspAggregateProduction_r{routing.Id}_t{period}",
47 expression.Build(),
49 0.0,
50 description: "Macro-period production equals the sum of its GLSP micro-period quantities.");
51 }
52 }
53
54 return ValueTask.CompletedTask;
55 }
56}
Provides a fluent builder for linear expressions.
LinearExpressionBuilder Add(MathematicalVariable variable, double coefficient=1.0)
Adds a variable term to the expression.
Provides the shared state required while constructing a solver-independent mathematical model.
MathematicalModel Build(bool clone=true)
Builds and validates the mathematical model.
override ValueTask BuildConstraintsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
static string CreateMicroProductionKey(int plantId, int workCenterId, int routingId, int itemId, ProductionMicroPeriodReference microPeriod)
static int WorkCenter ProductionSchedulingProfile Profile GetSchedulingWorkCenter(LotSizingInstance instance)
static IReadOnlyList< ProductionRouting > GetRoutings(LotSizingInstance instance, int plantId, int workCenterId)
Creates canonical variable domain keys used by the standard formulation constraint builders.
static string CreateProductionKey(int routingId, int period)
Creates a production decision key.
Provides common validation and helper methods for one constraint family of the standard lot-sizing fo...
static MathematicalVariable GetVariable(MathematicalModelBuildContext context, string domainKey)
Resolves a required variable from its canonical domain key.
static void AddConstraint(MathematicalModelBuildContext context, string name, LinearExpression expression, MathematicalConstraintSense sense, double rightHandSide, string domainKey="", string description="")
Adds one linear constraint to the mathematical model.
Configures the standard solver-independent mixed-integer lot-sizing formulation.
MathematicalConstraintSense
Identifies the relational sense of a mathematical constraint.