LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
SmallBucketGroupingConstraintFamilyBuilder.cs
Go to the documentation of this file.
1using LotSizingDataModel.Core.DecisionModel.Scheduling;
2using LotSizingDataModel.Core.Relationships;
3using LotSizingDataModel.Instance;
6
8
10{
11 public override string ConstraintFamilyId => "smallBucketSetupGrouping";
12 public override bool IsEnabled(LotSizingInstance instance,StandardLotSizingFormulationOptions options)
13 {
14 ArgumentNullException.ThrowIfNull(instance);ArgumentNullException.ThrowIfNull(options);
15 return instance.SupplyChain.ProductionRoutings.Any(r=>r.GroupingConstraint is not null);
16 }
17 protected override ValueTask BuildConstraintsAsync(LotSizingInstance instance,MathematicalModelBuildContext context,StandardLotSizingFormulationOptions options,CancellationToken cancellationToken)
18 {
19 ProductionSchedulingProfile profile=instance.SupplyChain.WorkCenters.Single(w=>w.SchedulingProfile is not null).SchedulingProfile!;
20 foreach(ProductionRouting routing in instance.SupplyChain.ProductionRoutings)
21 {
22 if(routing.GroupingConstraint is null) continue;
23 for(int setupPeriod=1;setupPeriod<=instance.PlanningHorizon;setupPeriod++)
24 {
25 int spacing=routing.GroupingConstraint.GetGroupingPeriodCount(setupPeriod);
26 int last=Math.Min(instance.PlanningHorizon,setupPeriod+spacing-1);
27 for(int forbidden=setupPeriod+1;forbidden<=last;forbidden++)
28 {
29 AddConstraint(context,$"smallBucketGrouping_r{routing.Id}_t{setupPeriod}_k{forbidden}",
31 .Add(GetVariable(context,SmallBucketSchedulingDomainKeyFactory.CreateSetupStartKey(profile,routing,setupPeriod)))
33 MathematicalConstraintSense.LessThanOrEqual,1.0);
34 }
35 }
36 }
37 return ValueTask.CompletedTask;
38 }
39}
Provides a fluent builder for linear expressions.
LinearExpressionBuilder Add(MathematicalVariable variable, double coefficient=1.0)
Adds a variable term to the expression.
LinearExpression Build(bool clone=true)
Builds and validates the linear expression.
Provides the shared state required while constructing a solver-independent mathematical model.
override bool IsEnabled(LotSizingInstance instance, StandardLotSizingFormulationOptions options)
Determines whether this constraint family is enabled.
override ValueTask BuildConstraintsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
static string CreateSetupStartKey(ProductionSchedulingProfile profile, ProductionRouting routing, int period)
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.