LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
MaximumLotSizeConstraintFamilyBuilder.cs
Go to the documentation of this file.
1using System;
2using System.Threading;
3using System.Threading.Tasks;
4using LotSizingDataModel.Core.Relationships;
5using LotSizingDataModel.Instance;
9
11
12/// <summary>Builds maximum production-lot-size constraints.</summary>
15{
16 public override string ConstraintFamilyId =>
17 "maximumLotSize";
18
19 public override bool IsEnabled(
20 LotSizingInstance instance,
22 {
23 ArgumentNullException.ThrowIfNull(instance);
24 ArgumentNullException.ThrowIfNull(options);
25
26 return instance.SupplyChain.ProductionRoutings.Any(
27 routing => routing.MaximumLotSize is not null);
28 }
29
30 protected override ValueTask BuildConstraintsAsync(
31 LotSizingInstance instance,
34 CancellationToken cancellationToken)
35 {
36 foreach (
37 ProductionRouting routing
38 in instance.SupplyChain.ProductionRoutings)
39 {
40 if (routing.MaximumLotSize is null)
41 {
42 continue;
43 }
44
45 for (
46 int period = 1;
47 period <= instance.PlanningHorizon;
48 period++)
49 {
50 cancellationToken.ThrowIfCancellationRequested();
51
52 double maximum =
53 routing.MaximumLotSize
54 .GetMaximumLotSize(period);
55
56 MathematicalVariable production =
57 context.GetVariable(
59 .CreateProductionKey(
60 routing.Id,
61 period));
62
64 context,
65 $"maximumLotSize_r{routing.Id}_t{period}",
67 .Add(production)
68 .Build(),
69 MathematicalConstraintSense.LessThanOrEqual,
70 maximum,
71 description:
72 "Maximum production lot size for the routing.");
73 }
74 }
75
76 return ValueTask.CompletedTask;
77 }
78}
Provides a fluent builder for linear expressions.
Provides the shared state required while constructing a solver-independent mathematical model.
override ValueTask BuildConstraintsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
override string ConstraintFamilyId
Gets the unique identifier of the constraint family.
override bool IsEnabled(LotSizingInstance instance, StandardLotSizingFormulationOptions options)
Determines whether this constraint family is enabled.
Creates canonical variable domain keys used by the standard formulation constraint builders.
Provides common validation and helper methods for one constraint family of the standard lot-sizing fo...
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.
Represents one decision variable in a mathematical optimization model.
MathematicalConstraintSense
Identifies the relational sense of a mathematical constraint.