LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
SupplierCapacityConstraintFamilyBuilder.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 procurement-capacity constraints for supplier-delivery relations.
14/// </summary>
15/// <remarks>
16/// alpha.22 capacity is scoped to supplier + item + destination warehouse.
17/// It is not an aggregate supplier-wide shared resource.
18/// </remarks>
21{
22 public override string ConstraintFamilyId =>
23 "supplierCapacity";
24
25 public override bool IsEnabled(
26 LotSizingInstance instance,
28 {
29 ArgumentNullException.ThrowIfNull(instance);
30 ArgumentNullException.ThrowIfNull(options);
31
32 return
33 options.IncludeProcurement &&
34 instance.SupplyChain.SupplierDeliveries.Any(
35 delivery =>
36 delivery.CapacityConstraint is not null);
37 }
38
39 protected override ValueTask BuildConstraintsAsync(
40 LotSizingInstance instance,
43 CancellationToken cancellationToken)
44 {
45 foreach (
46 SupplierDelivery delivery
47 in instance.SupplyChain.SupplierDeliveries)
48 {
49 if (delivery.CapacityConstraint is null)
50 {
51 continue;
52 }
53
54 for (
55 int period = 1;
56 period <= instance.PlanningHorizon;
57 period++)
58 {
59 cancellationToken.ThrowIfCancellationRequested();
60
61 var keyBuilder =
64 .Add(
66 delivery.SupplierId)
67 .Add(
69 delivery.ItemId);
70
73 keyBuilder,
74 delivery.Warehouse);
75
76 MathematicalVariable procurement =
77 context.GetVariable(
78 keyBuilder
79 .Add(
81 period)
82 .Build());
83
84 double capacity =
85 delivery.CapacityConstraint
86 .GetMaximumCapacity(period);
87
89 context,
90 $"supplierCapacity_f{delivery.SupplierId}" +
91 $"_i{delivery.ItemId}" +
92 $"_w{delivery.Warehouse.ReferenceId}" +
93 $"_t{period}",
95 .Add(procurement)
96 .Build(),
97 MathematicalConstraintSense.LessThanOrEqual,
98 capacity,
99 description:
100 "Maximum procurement quantity for one supplier-" +
101 "item-destination relationship.");
102 }
103 }
104
105 return ValueTask.CompletedTask;
106 }
107}
Provides a fluent builder for linear expressions.
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.
Creates canonical domain-key fragments shared by standard formulation builders and provides warehouse...
static MathematicalDomainKeyBuilder AddDestinationWarehouse(MathematicalDomainKeyBuilder builder, WarehouseReference warehouse)
Adds a destination warehouse reference.
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.
Builds procurement-capacity constraints for supplier-delivery relations.
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.
override ValueTask BuildConstraintsAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
Provides the canonical mathematical domain-key categories used to identify lot-sizing decision famili...
const string Procurement
Identifies supplier-procurement 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.