LotSizingDataModel.Instance 2.0.1
Lot-sizing instance representation, descriptors and problem characterization.
Loading...
Searching...
No Matches
TemporalPatternTolerance.cs
Go to the documentation of this file.
2
3/// <summary>
4/// Defines the numerical tolerance policy used for temporal-pattern analysis.
5/// </summary>
6public sealed class TemporalPatternTolerance
7{
8 /// <summary>
9 /// Gets the default conservative numerical tolerance.
10 /// </summary>
11 public static TemporalPatternTolerance Default { get; } =
12 new(
13 absoluteTolerance: 1e-9,
14 relativeTolerance: 1e-9);
15
16 /// <summary>
17 /// Initializes a tolerance policy.
18 /// </summary>
20 double absoluteTolerance,
21 double relativeTolerance)
22 {
23 ValidateTolerance(
24 absoluteTolerance,
25 nameof(absoluteTolerance));
26
27 ValidateTolerance(
28 relativeTolerance,
29 nameof(relativeTolerance));
30
31 AbsoluteTolerance = absoluteTolerance;
32 RelativeTolerance = relativeTolerance;
33 }
34
35 public double AbsoluteTolerance { get; }
36 public double RelativeTolerance { get; }
37
38 /// <summary>
39 /// Computes the effective absolute tolerance for a given value scale.
40 /// </summary>
41 public double GetEffectiveTolerance(double scale)
42 {
43 if (!double.IsFinite(scale) || scale < 0.0)
44 {
45 throw new ArgumentOutOfRangeException(
46 nameof(scale),
47 scale,
48 "The comparison scale must be finite and non-negative.");
49 }
50
51 return Math.Max(
53 RelativeTolerance * scale);
54 }
55
56 private static void ValidateTolerance(
57 double value,
58 string parameterName)
59 {
60 if (!double.IsFinite(value) || value < 0.0)
61 {
62 throw new ArgumentOutOfRangeException(
63 parameterName,
64 value,
65 "A numerical tolerance must be finite and non-negative.");
66 }
67 }
68}
TemporalPatternTolerance(double absoluteTolerance, double relativeTolerance)
Initializes a tolerance policy.
double GetEffectiveTolerance(double scale)
Computes the effective absolute tolerance for a given value scale.
static TemporalPatternTolerance Default
Gets the default conservative numerical tolerance.