LotSizingDataModel.Solver 2.0.1
Solver-independent modeling, execution, monitoring and adapter infrastructure.
Loading...
Searching...
No Matches
StandardLotSizingConstraintBuilder.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Threading;
5using System.Threading.Tasks;
6using LotSizingDataModel.Instance;
8
10
11/// <summary>
12/// Builds all constraint families of the standard lot-sizing
13/// formulation.
14/// </summary>
17{
18 private readonly IReadOnlyList<IStandardLotSizingConstraintFamilyBuilder>
19 _familyBuilders;
20
21 /// <summary>
22 /// Initializes the standard constraint builder.
23 /// </summary>
24 /// <param name="familyBuilders">
25 /// Ordered constraint-family builders.
26 /// </param>
27 /// <exception cref="ArgumentNullException">
28 /// Thrown when <paramref name="familyBuilders"/> is
29 /// <see langword="null"/>.
30 /// </exception>
31 /// <exception cref="InvalidOperationException">
32 /// Thrown when the collection contains a null builder or
33 /// duplicate family identifiers.
34 /// </exception>
36 IEnumerable<IStandardLotSizingConstraintFamilyBuilder> familyBuilders)
37 {
38 ArgumentNullException.ThrowIfNull(
39 familyBuilders);
40
42 familyBuilders.ToArray();
43
44 if (builders.Any(
45 builder =>
46 builder is null))
47 {
48 throw new InvalidOperationException(
49 "The standard constraint-family builder " +
50 "collection cannot contain a null entry.");
51 }
52
53 string[] duplicateIds =
54 builders
55 .GroupBy(
56 builder =>
57 builder.ConstraintFamilyId,
58 StringComparer.OrdinalIgnoreCase)
59 .Where(
60 group =>
61 group.Count() > 1)
62 .Select(
63 group =>
64 group.Key)
65 .ToArray();
66
67 if (duplicateIds.Length > 0)
68 {
69 throw new InvalidOperationException(
70 "Duplicate standard constraint-family " +
71 "identifiers were registered: " +
72 string.Join(
73 ", ",
74 duplicateIds));
75 }
76
77 _familyBuilders =
78 builders;
79 }
80
81 /// <summary>
82 /// Gets the ordered constraint-family builders.
83 /// </summary>
84 public IReadOnlyList<IStandardLotSizingConstraintFamilyBuilder>
86 _familyBuilders;
87
88 /// <summary>
89 /// Builds all enabled standard constraint families.
90 /// </summary>
91 /// <param name="instance">
92 /// Source lot-sizing instance.
93 /// </param>
94 /// <param name="context">
95 /// Mathematical-model build context.
96 /// </param>
97 /// <param name="options">
98 /// Standard formulation options.
99 /// </param>
100 /// <param name="cancellationToken">
101 /// Token used to cancel constraint construction.
102 /// </param>
103 /// <returns>
104 /// Task representing constraint construction.
105 /// </returns>
106 public async ValueTask BuildAsync(
107 LotSizingInstance instance,
110 CancellationToken cancellationToken = default)
111 {
112 ArgumentNullException.ThrowIfNull(
113 instance);
114
115 ArgumentNullException.ThrowIfNull(
116 context);
117
118 ArgumentNullException.ThrowIfNull(
119 options);
120
121 options.EnsureValid();
122
123 foreach (
125 in _familyBuilders)
126 {
127 cancellationToken.ThrowIfCancellationRequested();
128
129 if (!familyBuilder.IsEnabled(
130 instance,
131 options))
132 {
133 continue;
134 }
135
136 await familyBuilder.BuildAsync(
137 instance,
138 context,
139 options,
140 cancellationToken);
141 }
142 }
143}
Provides the shared state required while constructing a solver-independent mathematical model.
IReadOnlyList< IStandardLotSizingConstraintFamilyBuilder > FamilyBuilders
Gets the ordered constraint-family builders.
async ValueTask BuildAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken=default)
Builds all enabled standard constraint families.
StandardLotSizingConstraintBuilder(IEnumerable< IStandardLotSizingConstraintFamilyBuilder > familyBuilders)
Initializes the standard constraint builder.
Configures the standard solver-independent mixed-integer lot-sizing formulation.
Defines the constraint-construction component used by the standard solver-independent lot-sizing form...
bool IsEnabled(LotSizingInstance instance, StandardLotSizingFormulationOptions options)
Determines whether this constraint family is enabled.
ValueTask BuildAsync(LotSizingInstance instance, MathematicalModelBuildContext context, StandardLotSizingFormulationOptions options, CancellationToken cancellationToken=default)
Builds all constraints belonging to this family.