LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
TransportResourceAdditionalCapacityVariableFamilyBuilder.cs
Go to the documentation of this file.
1using System;
2using System.Threading;
3using System.Threading.Tasks;
4using LotSizingDataModel.Core.PhysicalModel;
5using LotSizingDataModel.Instance;
8
10
11/// <summary>
12/// Builds global additional transport-resource capacity
13/// variables.
14/// </summary>
17{
18 /// <summary>
19 /// Gets the transport-resource additional-capacity family
20 /// identifier.
21 /// </summary>
22 public override string FamilyId =>
25
26 /// <summary>
27 /// Determines whether global additional transport-resource
28 /// capacity variables are enabled.
29 /// </summary>
30 public override bool IsEnabled(
31 LotSizingInstance instance,
33 {
34 ArgumentNullException.ThrowIfNull(instance);
35 ArgumentNullException.ThrowIfNull(options);
36
37 if (!options.IncludeTransport ||
39 {
40 return false;
41 }
42
43 foreach (
44 TransportResource resource
45 in instance.SupplyChain.TransportResources)
46 {
47 if (resource.AdditionalCapacity is not null)
48 {
49 return true;
50 }
51 }
52
53 return false;
54 }
55
56 /// <summary>
57 /// Builds global additional transport-resource capacity
58 /// variables.
59 /// </summary>
60 protected override ValueTask BuildFamilyAsync(
61 LotSizingInstance instance,
64 CancellationToken cancellationToken)
65 {
66 foreach (
67 TransportResource resource
68 in instance.SupplyChain.TransportResources)
69 {
70 if (resource.AdditionalCapacity is null)
71 {
72 continue;
73 }
74
75 for (
76 int period = 1;
77 period <= instance.PlanningHorizon;
78 period++)
79 {
80 cancellationToken.ThrowIfCancellationRequested();
81
82 double upperBound =
83 resource.AdditionalCapacity[period];
84
86 upperBound,
87 options))
88 {
89 continue;
90 }
91
92 string domainKey =
95 .TransportResourceAdditionalCapacity)
96 .Add(
98 .TransportResource,
99 resource.Id)
100 .Add(
102 period)
103 .Build();
104
106 context,
107 $"OR_r{resource.Id}_t{period}",
108 domainKey,
109 upperBound,
110 $"Additional capacity of transport resource " +
111 $"{resource.Id} in 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.
Configures the standard solver-independent mixed-integer lot-sizing formulation.
bool IncludeAdditionalCapacity
Gets or sets whether additional capacities are included.
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.
override ValueTask BuildFamilyAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken)
Builds global additional transport-resource capacity variables.
override bool IsEnabled(LotSizingInstance instance, StandardLotSizingFormulationOptions options)
Determines whether global additional transport-resource capacity variables are enabled.
Provides the canonical mathematical domain-key categories used to identify lot-sizing decision famili...
const string TransportResourceAdditionalCapacity
Identifies additional transport-resource-capacity decision variables.
Provides the canonical mathematical domain-key segment names used by lot-sizing variables and constra...