LotSizingDataModel.Instance 2.0.1
Lot-sizing instance representation, descriptors and problem characterization.
Loading...
Searching...
No Matches
UniversalNotationAst.cs
Go to the documentation of this file.
3
5
6/// <summary>
7/// Alpha field: structural/environment characteristics.
8/// </summary>
9public sealed class UniversalNotationAlpha
10{
13
14 public UniversalProblemLevel ProblemLevel { get; init; } =
16
19
20 public UniversalNetworkNotation Network { get; init; } =
21 new();
22}
23
24/// <summary>
25/// Beta field: constraints and modeled extensions.
26/// </summary>
27public sealed class UniversalNotationBeta
28{
29 private readonly IReadOnlyCollection<UniversalNotationFeature> _features;
30
31 private readonly IReadOnlyCollection<UniversalTemporalQualifier>
32 _temporalQualifiers;
33
34 private readonly IReadOnlyCollection<UniversalSemanticCondition>
35 _semanticConditions;
36
38 IEnumerable<UniversalNotationFeature>? features = null,
39 IEnumerable<UniversalTemporalQualifier>? temporalQualifiers = null,
40 IEnumerable<UniversalSemanticCondition>? semanticConditions = null)
41 {
42 _features =
43 (features ?? Array.Empty<UniversalNotationFeature>())
44 .Distinct()
45 .OrderBy(feature => (int)feature)
46 .ToArray();
47
48 UniversalTemporalQualifier[] qualifierArray =
49 (temporalQualifiers ??
50 Array.Empty<UniversalTemporalQualifier>())
51 .ToArray();
52
53 var canonicalQualifiers =
54 new List<UniversalTemporalQualifier>();
55
56 foreach (
57 IGrouping<
60 in qualifierArray.GroupBy(
61 qualifier => qualifier.Parameter))
62 {
63 TemporalPatternType[] patterns =
64 group
65 .Select(qualifier => qualifier.Pattern)
66 .Distinct()
67 .ToArray();
68
69 if (patterns.Length > 1)
70 {
71 throw new ArgumentException(
72 "A beta field cannot contain conflicting temporal " +
73 $"patterns for parameter '{group.Key}'.",
74 nameof(temporalQualifiers));
75 }
76
77 canonicalQualifiers.Add(
79 group.Key,
80 patterns[0]));
81 }
82
83 _temporalQualifiers =
84 canonicalQualifiers
85 .OrderBy(
86 qualifier =>
87 (int)qualifier.Parameter)
88 .ToArray();
89
90 _semanticConditions =
91 (semanticConditions ??
92 Array.Empty<UniversalSemanticCondition>())
93 .Distinct()
94 .OrderBy(condition => (int)condition)
95 .ToArray();
96 }
97
98 public IReadOnlyCollection<UniversalNotationFeature> Features =>
99 _features;
100
101 public IReadOnlyCollection<UniversalTemporalQualifier>
103 _temporalQualifiers;
104
105 public IReadOnlyCollection<UniversalSemanticCondition>
107 _semanticConditions;
108
109 public bool Contains(UniversalNotationFeature feature) =>
110 _features.Contains(feature);
111
113 UniversalSemanticCondition condition) =>
114 _semanticConditions.Contains(condition);
115
118 out UniversalTemporalQualifier? qualifier)
119 {
120 qualifier =
121 _temporalQualifiers.FirstOrDefault(
122 candidate =>
123 candidate.Parameter == parameter);
124
125 return qualifier is not null;
126 }
127}
128
129
130/// <summary>
131/// Gamma field: objective family.
132/// </summary>
133public sealed class UniversalNotationGamma
134{
135 public UniversalObjectiveKind Objective { get; init; } =
137}
138
139/// <summary>
140/// Typed abstract syntax tree for the versioned alpha | beta | gamma scheme.
141/// </summary>
142public sealed class UniversalLotSizingNotation
143{
148 string? schemeVersion = null)
149 {
150 Alpha =
151 alpha ??
152 throw new ArgumentNullException(nameof(alpha));
153
154 Beta =
155 beta ??
156 throw new ArgumentNullException(nameof(beta));
157
158 Gamma =
159 gamma ??
160 throw new ArgumentNullException(nameof(gamma));
161
163 schemeVersion ??
165
167 {
168 throw new NotSupportedException(
169 $"Universal notation scheme version '{SchemeVersion}' " +
170 "is not supported.");
171 }
172 }
173
174 public string SchemeVersion { get; }
178
179 public string Render() =>
181
182 public override string ToString() =>
183 Render();
184}
UniversalLotSizingNotation(UniversalNotationAlpha alpha, UniversalNotationBeta beta, UniversalNotationGamma gamma, string? schemeVersion=null)
Typed alpha-field representation of the physical network.
Alpha field: structural/environment characteristics.
Beta field: constraints and modeled extensions.
IReadOnlyCollection< UniversalNotationFeature > Features
IReadOnlyCollection< UniversalSemanticCondition > SemanticConditions
UniversalNotationBeta(IEnumerable< UniversalNotationFeature >? features=null, IEnumerable< UniversalTemporalQualifier >? temporalQualifiers=null, IEnumerable< UniversalSemanticCondition >? semanticConditions=null)
IReadOnlyCollection< UniversalTemporalQualifier > TemporalQualifiers
bool ContainsSemanticCondition(UniversalSemanticCondition condition)
bool TryGetTemporalQualifier(UniversalTemporalParameter parameter, out UniversalTemporalQualifier? qualifier)
Renders the canonical text form of notation scheme version 1.
static string Render(UniversalLotSizingNotation notation)
Identifies the versioned LotSizingDataModel universal notation scheme.
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...
UniversalSemanticCondition
Generic derived semantic conditions that may be required by a universal problem specification.
UniversalObjectiveKind
Objective family represented in the gamma field of notation v1.
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...
UniversalProblemLevel
Canonical BOM-level token.
record UniversalTemporalQualifier
Qualifies one universal model-parameter family with a generic temporal pattern.
UniversalItemCardinality
Canonical item-cardinality token.