17 ArgumentNullException.ThrowIfNull(classification);
27 ArgumentNullException.ThrowIfNull(classification);
30 new List<UniversalNotationFeature>
38 var temporalQualifiers =
39 new List<UniversalTemporalQualifier>();
41 var semanticConditions =
42 new List<UniversalSemanticCondition>();
64 MapExtendedDimensions(
70 classification.ItemCount
switch
78 classification.MultiLevel is
null
88 .ProductStructureType.General,
91 .ProductStructureType.Assembly,
94 .ProductStructureType.Serial,
97 .ProductStructureType.IndependentItems
105 ItemCardinality = itemCardinality,
106 ProblemLevel = level,
107 ProductStructureType = structure,
114 .SupplyNetworkTopologyType.Unknown
142 private static void MapProblemVersion(
144 ICollection<UniversalSemanticCondition> semanticConditions,
145 ICollection<string> missing)
154 semanticConditions.Add(
160 semanticConditions.Add(
165 "PROB.DLSI:VariableInitialStockDecision");
169 semanticConditions.Add(
174 "PROB.DLS:NoVariableInitialStockDecision");
178 throw new ArgumentOutOfRangeException(
181 "Unknown Wolsey PROB field.");
185 private static void MapCapacity(
187 ICollection<UniversalNotationFeature> features,
188 ICollection<UniversalTemporalQualifier> temporalQualifiers,
189 ICollection<string> missing)
204 temporalQualifiers.Add(
217 throw new ArgumentOutOfRangeException(
220 "Unknown Wolsey CAP field.");
224 private static void MapVariants(
225 IEnumerable<WolseyVariant> variants,
226 ICollection<UniversalNotationFeature> features,
227 ICollection<UniversalTemporalQualifier> temporalQualifiers,
228 ICollection<string> missing)
253 temporalQualifiers.Add(
261 "VAR.SL:AdditionalSales");
272 temporalQualifiers.Add(
284 throw new ArgumentOutOfRangeException(
287 "Unknown Wolsey VAR entry.");
292 private static void MapExtendedDimensions(
293 WolseyExtendedClassification classification,
294 ICollection<UniversalNotationFeature> features,
295 ICollection<string> missing)
297 if (classification.Machines is not
null)
299 WolseyMachineClassification machines =
300 classification.Machines;
303 $
"Machines.NK={machines.MachineCount}");
306 $
"Machines.Mode={machines.MachineMode}");
309 $
"Machines.Bucket={machines.BucketType}");
311 if (machines.HasLeadTimes)
319 in machines.Features)
346 throw new ArgumentOutOfRangeException(
347 nameof(classification),
349 "Unknown Wolsey machine feature.");
354 if (classification.ItemCount.HasValue)
358 if (classification.ItemCount.Value > 1)
361 $
"NI.ExactCount={classification.ItemCount.Value}");
365 if (classification.PeriodCount.HasValue)
368 $
"NT.ExactCount={classification.PeriodCount.Value}");
371 if (classification.MultiLevel is not
null)
375 $
"NL.ExactCount={classification.MultiLevel.LevelCount}");
Preserves Wolsey's optional multi-item/machine/level extension around the single-item PROB-CAP-VAR cl...
WolseyMultiLevelClassification? MultiLevel
WolseySingleItemClassification SingleItem
Projects Wolsey's 2002 classification onto the generic universal notation without changing the meanin...
WolseyHistoricalMapping Map(WolseySingleItemClassification classification)
WolseyHistoricalMapping Map(WolseyExtendedClassification classification)
Represents a Wolsey historical classification and the portion currently expressible as a universal pr...
WolseyMultiLevelStructure Structure
Lossless typed representation of Wolsey's PROB-CAP-VAR single-item classification.
WolseyProblemVersion Problem
WolseyCapacityRegime Capacity
IReadOnlyCollection< WolseyVariant > Variants
Represents a universal notation interpreted as a problem specification.
Typed abstract syntax tree for the versioned alpha | beta | gamma scheme.
Typed alpha-field representation of the physical network.
Alpha field: structural/environment characteristics.
Beta field: constraints and modeled extensions.
Gamma field: objective family.
ProductStructureType
Identifies the structural category of a product bill-of-materials graph.
TemporalPatternType
Canonical temporal-pattern categories used by historical lot-sizing classifications such as Bitran-Ya...
HistoricalMappingCoverage
Describes how completely a historical classification can currently be represented by the universal no...
@ Exact
Every historical dimension is represented by the universal specification.
WolseyCapacityRegime
Second CAP field of Wolsey's 2002 single-item classification.
WolseyMachineFeature
Capacity-utilization/setup/changeover markers in Wolsey's multi-item extension.
@ S
Series / linear structure.
@ G
General product structure.
WolseyVariant
Third VAR field extensions of Wolsey's 2002 single-item classification.
WolseyProblemVersion
First PROB field of Wolsey's 2002 single-item classification.
UniversalSemanticCondition
Generic derived semantic conditions that may be required by a universal problem specification.
@ ZeroOrFullCapacityProduction
Whenever production is positive, the modeled lower bound and capacity force production exactly to ful...
@ NonSpeculativeProductionHoldingCosts
Adjacent unit production/acquisition and holding costs satisfy the non-speculative condition.
UniversalTemporalParameter
Identifies a time-varying model parameter that may be qualified by a generic temporal pattern in univ...
UniversalNotationFeature
Feature vocabulary represented in the beta field of notation v1. Enum order is the canonical renderin...
@ SequenceDependentChangeoverCost
@ SequenceDependentChangeoverTime
@ TimeVaryingProductionCapacity
UniversalProblemLevel
Canonical BOM-level token.
record UniversalTemporalQualifier
Qualifies one universal model-parameter family with a generic temporal pattern.
UniversalItemCardinality
Canonical item-cardinality token.