LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
InventoryAdditionalCapacityVariableFamilyBuilder.cs
Go to the documentation of this file.
1using System;
2using System.Linq;
3using System.Threading;
4using System.Threading.Tasks;
5using LotSizingDataModel.Core.Relationships;
6using LotSizingDataModel.Instance;
9
11
12/// <summary>
13/// Builds item-specific additional inventory-capacity
14/// variables.
15/// </summary>
18{
19 /// <summary>
20 /// Gets the inventory additional-capacity variable-family
21 /// identifier.
22 /// </summary>
23 public override string FamilyId =>
25
26 /// <summary>
27 /// Determines whether additional inventory capacity is
28 /// enabled.
29 /// </summary>
30 public override bool IsEnabled(
31 LotSizingInstance instance,
33 {
34 ArgumentNullException.ThrowIfNull(
35 instance);
36
37 ArgumentNullException.ThrowIfNull(
38 options);
39
40 return
41 options.IncludeAdditionalCapacity &&
42 instance.SupplyChain.Inventories.Any(
43 inventory =>
44 inventory.AdditionalCapacity is not null);
45 }
46
47 /// <summary>
48 /// Builds item-specific additional inventory-capacity
49 /// variables.
50 /// </summary>
51 protected override ValueTask BuildFamilyAsync(
52 LotSizingInstance instance,
55 CancellationToken cancellationToken)
56 {
57 foreach (
58 Inventory inventory
59 in instance.SupplyChain.Inventories)
60 {
61 if (inventory.AdditionalCapacity is null)
62 {
63 continue;
64 }
65
66 for (
67 int period = 1;
68 period <= instance.PlanningHorizon;
69 period++)
70 {
71 cancellationToken.ThrowIfCancellationRequested();
72
73 double upperBound =
74 inventory.AdditionalCapacity[period];
75
77 upperBound,
78 options))
79 {
80 continue;
81 }
82
83 var keyBuilder =
86 .InventoryAdditionalCapacity)
87 .Add(
89 inventory.ItemId);
90
92 keyBuilder,
93 inventory.Warehouse);
94
95 string domainKey =
96 keyBuilder
97 .Add(
99 period)
100 .Build();
101
103 context,
104 $"OI_i{inventory.ItemId}_w" +
105 $"{inventory.Warehouse.ReferenceId}_t{period}",
106 domainKey,
107 upperBound,
108 $"Additional inventory capacity for item " +
109 $"{inventory.ItemId} at warehouse " +
110 $"{inventory.Warehouse.ReferenceId}, " +
111 $"period {period}.");
112 }
113 }
114
115 return ValueTask.CompletedTask;
116 }
117}
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 additional inventory capacity is enabled.
override ValueTask BuildFamilyAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
Builds item-specific additional inventory-capacity variables.
override string FamilyId
Gets the inventory additional-capacity variable-family identifier.
Creates canonical domain-key fragments shared by standard formulation builders and provides warehouse...
static MathematicalDomainKeyBuilder AddWarehouse(MathematicalDomainKeyBuilder builder, WarehouseReference warehouse)
Adds a warehouse reference using the generic warehouse or plant segment.
Configures the standard solver-independent mixed-integer lot-sizing formulation.
Provides common validation and variable-registration helpers for one variable family of the standard ...
static bool IsStructurallyZero(double upperBound, StandardLotSizingFormulationOptions options)
Determines whether a finite non-negative upper bound is structurally equal to zero according to the f...
static MathematicalVariable AddNonNegativeContinuousVariable(MathematicalModelBuildContext context, string name, string domainKey, double upperBound=double.PositiveInfinity, string description="")
Creates and registers one continuous non-negative variable.
Provides the canonical mathematical domain-key categories used to identify lot-sizing decision famili...
const string InventoryAdditionalCapacity
Identifies additional inventory-capacity decision variables.
Provides the canonical mathematical domain-key segment names used by lot-sizing variables and constra...