LotSizingDataModel.Instance 2.0.1
Lot-sizing instance representation, descriptors and problem characterization.
Loading...
Searching...
No Matches
UniversalDerivedSemantics.cs
Go to the documentation of this file.
2
3/// <summary>
4/// Carries explicit derived analyses that cannot be inferred from the coarse
5/// typed descriptor alone.
6/// </summary>
7/// <remarks>
8/// Unknown is different from false. This distinction is required by positive
9/// specification matching.
10/// </remarks>
11public sealed class UniversalDerivedSemantics
12{
13 private readonly IReadOnlyCollection<UniversalTemporalQualifier>
14 _temporalQualifiers;
15
16 private readonly IReadOnlyDictionary<
18 UniversalConditionState> _conditionStates;
19
20 public static UniversalDerivedSemantics Empty { get; } =
21 new();
22
24 IEnumerable<UniversalTemporalQualifier>? temporalQualifiers = null,
25 IEnumerable<UniversalSemanticConditionAssessment>?
26 conditionAssessments = null)
27 {
28 // Reuse the canonical beta temporal validation policy.
29 var temporalOnlyBeta =
31 temporalQualifiers: temporalQualifiers);
32
33 _temporalQualifiers =
34 temporalOnlyBeta.TemporalQualifiers.ToArray();
35
36 var states =
37 new Dictionary<
40
41 foreach (
43 in conditionAssessments ??
45 {
46 if (
47 states.TryGetValue(
48 assessment.Condition,
49 out UniversalConditionState existing) &&
50 existing != assessment.State)
51 {
52 throw new ArgumentException(
53 "Conflicting actual states were supplied for semantic " +
54 $"condition '{assessment.Condition}'.",
55 nameof(conditionAssessments));
56 }
57
58 states[assessment.Condition] =
59 assessment.State;
60 }
61
62 _conditionStates = states;
63 }
64
65 public IReadOnlyCollection<UniversalTemporalQualifier>
67 _temporalQualifiers;
68
69 public IReadOnlyCollection<UniversalSemanticCondition>
71 _conditionStates
72 .Where(
73 pair =>
74 pair.Value ==
76 .Select(pair => pair.Key)
77 .OrderBy(condition => (int)condition)
78 .ToArray();
79
83 {
84 if (_conditionStates.TryGetValue(condition, out state))
85 {
86 return true;
87 }
88
89 state = UniversalConditionState.Unknown;
90 return false;
91 }
92}
bool TryGetConditionState(UniversalSemanticCondition condition, out UniversalConditionState state)
IReadOnlyCollection< UniversalTemporalQualifier > TemporalQualifiers
IReadOnlyCollection< UniversalSemanticCondition > SatisfiedConditions
UniversalDerivedSemantics(IEnumerable< UniversalTemporalQualifier >? temporalQualifiers=null, IEnumerable< UniversalSemanticConditionAssessment >? conditionAssessments=null)
Beta field: constraints and modeled extensions.
UniversalSemanticCondition
Generic derived semantic conditions that may be required by a universal problem specification.
record UniversalSemanticConditionAssessment
One explicit actual assessment of a generic semantic condition.
UniversalConditionState
Three-valued state of a derived semantic condition.