LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
MinimumLotSizeConstraintFamilyBuilder.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>
13/// Builds minimum production-lot-size constraints.
14/// </summary>
17{
18 /// <summary>Gets the family identifier.</summary>
19 public override string ConstraintFamilyId => "minimumLotSize";
20
21 /// <summary>Determines whether the family is enabled.</summary>
22 public override bool IsEnabled(
23 LotSizingInstance instance,
25 {
26 ArgumentNullException.ThrowIfNull(instance);
27 ArgumentNullException.ThrowIfNull(options);
28
29 if (!options.IncludeProductionSetups)
30 {
31 return false;
32 }
33
34 foreach (ProductionRouting routing in instance.SupplyChain.ProductionRoutings)
35 {
36 if (routing.MinimumLotSize is not null)
37 {
38 return true;
39 }
40 }
41
42 return false;
43 }
44
45 /// <summary>Builds minimum-lot-size constraints.</summary>
46 protected override ValueTask BuildConstraintsAsync(
47 LotSizingInstance instance,
50 CancellationToken cancellationToken)
51 {
52 foreach (ProductionRouting routing in instance.SupplyChain.ProductionRoutings)
53 {
54 if (routing.MinimumLotSize is null)
55 {
56 continue;
57 }
58
59 for (int period = 1; period <= instance.PlanningHorizon; period++)
60 {
61 cancellationToken.ThrowIfCancellationRequested();
62
63 double minimum =
64 routing.MinimumLotSize.GetMinimumLotSize(period);
65
66 if (minimum <= options.StructuralZeroTolerance)
67 {
68 continue;
69 }
70
71 MathematicalVariable production =
72 context.GetVariable(
74 routing.Id,
75 period));
76
78 context.GetVariable(
83 .Build());
84
85 var expression =
87 .Add(production)
88 .Subtract(setup, minimum);
89
91 context,
92 $"minimumLotSize_r{routing.Id}_t{period}",
93 expression.Build(),
94 MathematicalConstraintSense.GreaterThanOrEqual,
95 0.0,
96 description:
97 "Minimum production lot size when setup is active.");
98 }
99 }
100
101 return ValueTask.CompletedTask;
102 }
103}
Provides a fluent builder for linear expressions.
LinearExpressionBuilder Subtract(MathematicalVariable variable, double coefficient=1.0)
Subtracts a variable term from the expression.
LinearExpressionBuilder Add(MathematicalVariable variable, double coefficient=1.0)
Adds a variable term to the expression.
Builds stable business-domain keys for mathematical variables and constraints.
MathematicalDomainKeyBuilder Add(string name, string value)
Adds a text segment.
Provides the shared state required while constructing a solver-independent mathematical model.
override bool IsEnabled(LotSizingInstance instance, StandardLotSizingFormulationOptions options)
Determines whether the family is enabled.
override ValueTask BuildConstraintsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
Builds minimum-lot-size constraints.
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 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.
Provides the canonical mathematical domain-key categories used to identify lot-sizing decision famili...
const string Setup
Identifies production setup decision variables.
Provides the canonical mathematical domain-key segment names used by lot-sizing variables and constra...
Represents one decision variable in a mathematical optimization model.
MathematicalConstraintSense
Identifies the relational sense of a mathematical constraint.