ULSAlgorithms 1.1.0-g3e5595996d
High-performance exact and heuristic algorithms for uncapacitated lot sizing
Loading...
Searching...
No Matches
CutGenerationReport.cs
Go to the documentation of this file.
2
3/// <summary>
4/// Complete cutting-plane traceability report for one solver-backed solve.
5/// </summary>
6public sealed class CutGenerationReport
7{
8 private readonly CutIterationReport[] _iterations;
9 private readonly CutRecord[] _cuts;
10
11 /// <summary>Initializes a complete cut-generation report.</summary>
13 IEnumerable<CutIterationReport> iterations)
14 {
15 ArgumentNullException.ThrowIfNull(iterations);
16
17 _iterations = iterations
18 .OrderBy(
19 static iteration =>
20 iteration.Iteration)
21 .ToArray();
22
23 if (_iterations
24 .Select(
25 static item =>
26 item.Iteration)
27 .Distinct()
28 .Count() !=
29 _iterations.Length)
30 {
31 throw new ArgumentException(
32 "Iteration identifiers must be unique.",
33 nameof(iterations));
34 }
35
36 _cuts = _iterations
37 .SelectMany(
38 static iteration =>
39 iteration.Cuts)
40 .OrderBy(
41 static cut =>
42 cut.SequenceNumber)
43 .ToArray();
44
45 if (_cuts
46 .Select(
47 static cut =>
48 cut.SequenceNumber)
49 .Distinct()
50 .Count() !=
51 _cuts.Length)
52 {
53 throw new ArgumentException(
54 "Cut sequence numbers must be unique within a solve.",
55 nameof(iterations));
56 }
57 }
58
59 public IReadOnlyList<CutIterationReport> Iterations => _iterations;
60 public IReadOnlyList<CutRecord> Cuts => _cuts;
61 public int IterationCount => _iterations.Length;
62 public int CutsGenerated => _cuts.Length;
63
64 public IReadOnlyList<CutRecord> AddedCuts =>
65 _cuts.Where(
66 static cut =>
67 cut.WasAdded)
68 .ToArray();
69
70 public IReadOnlyList<CutRecord> GeneratedButNotAddedCuts =>
71 _cuts.Where(
72 static cut =>
73 !cut.WasAdded)
74 .ToArray();
75
76 public int CutsAdded =>
77 _cuts.Count(
78 static cut =>
79 cut.WasAdded);
80
81 public int Duplicates =>
82 _cuts.Count(
83 static cut =>
84 cut.Disposition ==
85 CutDisposition.Duplicate);
86
87 public int BelowTolerance =>
88 _cuts.Count(
89 static cut =>
90 cut.Disposition ==
91 CutDisposition.BelowTolerance);
92
93 public int NotSelected =>
94 _cuts.Count(
95 static cut =>
96 cut.Disposition ==
97 CutDisposition.NotSelected);
98
99 public int SolverRejected =>
100 _cuts.Count(
101 static cut =>
102 cut.Disposition ==
103 CutDisposition.SolverRejected);
104
105 public double MaximumViolation =>
106 _cuts.Length == 0
107 ? 0.0
108 : _cuts.Max(
109 static cut =>
110 cut.Violation);
111
112 public TimeSpan TotalSeparationTime =>
113 TimeSpan.FromTicks(
114 _iterations.Sum(
115 static iteration =>
116 iteration.SeparationTime.Ticks));
117}
IReadOnlyList< CutIterationReport > Iterations
CutGenerationReport(IEnumerable< CutIterationReport > iterations)
Initializes a complete cut-generation report.
Traceability report for one cutting-plane iteration.
Trace record for one generated cutting-plane constraint.
Definition CutRecord.cs:7
CutDisposition
Describes what happened to a generated cut after separation.