24 private const string ObjectiveValueSource =
25 "Recomputed by LotSizingSolutionChecker from candidate " +
26 "decision-variable values";
30 LotSizingSolution solution,
33 DateTime evaluatedAtUtc,
34 KnownResult? knownResult =
null)
36 ArgumentNullException.ThrowIfNull(solution);
37 ArgumentNullException.ThrowIfNull(checkResult);
38 ArgumentNullException.ThrowIfNull(options);
42 if (evaluatedAtUtc.Kind == DateTimeKind.Local)
44 evaluatedAtUtc = evaluatedAtUtc.ToUniversalTime();
46 else if (evaluatedAtUtc.Kind == DateTimeKind.Unspecified)
48 evaluatedAtUtc = DateTime.SpecifyKind(
53 var applicationResult =
58 ApplyToSolutionEvaluation(
64 applicationResult.SolutionEvaluationUpdated =
68 if (knownResult is not
null)
77 return applicationResult;
80 private static void ApplyToSolutionEvaluation(
81 LotSizingSolution solution,
84 DateTime evaluatedAtUtc)
86 solution.Evaluation.EvaluatedAtUtc =
89 solution.Evaluation.EvaluatorName =
92 solution.Evaluation.EvaluatorVersion =
95 if (CanPublishFeasibility(result))
98 result.IsStructurallyValid &&
99 result.AreVariableDomainsValid &&
102 solution.Evaluation.FeasibilityStatus =
104 ? FeasibilityStatus.Feasible
105 : FeasibilityStatus.Infeasible;
107 solution.Evaluation.MaximumConstraintViolation =
110 solution.Evaluation.TotalConstraintViolation =
113 solution.Evaluation.ViolatedConstraintCount =
118 solution.Evaluation.FeasibilityStatus =
119 FeasibilityStatus.NotEvaluated;
121 solution.Evaluation.MaximumConstraintViolation =
124 solution.Evaluation.TotalConstraintViolation =
127 solution.Evaluation.ViolatedConstraintCount =
134 solution.Evaluation.ObjectiveValue =
137 solution.Evaluation.ObjectiveValueSource =
138 ObjectiveValueSource;
142 solution.Evaluation.ObjectiveValue =
145 solution.Evaluation.ObjectiveValueSource =
150 private static void ApplyToKnownResult(
151 KnownResult knownResult,
152 SolutionCheckResult result,
153 SolutionVerificationOptions options,
154 SolutionCheckApplicationResult applicationResult)
157 CanPublishFeasibility(result))
160 result.IsStructurallyValid &&
161 result.AreVariableDomainsValid &&
164 knownResult.FeasibilityStatus =
166 ? FeasibilityStatus.Feasible
167 : FeasibilityStatus.Infeasible;
169 applicationResult.KnownResultFeasibilityUpdated =
178 knownResult.VerificationStatus =
179 KnownResultVerificationStatus.AutomaticallyVerified;
181 applicationResult.KnownResultPromoted =
186 private static bool CanPublishFeasibility(
187 SolutionCheckResult result)
190 result.StructuralCheckCompleted &&
191 result.VariableDomainCheckCompleted &&
SolutionCheckApplicationResult Apply(LotSizingSolution solution, SolutionCheckResult checkResult, SolutionVerificationOptions options, DateTime evaluatedAtUtc, KnownResult? knownResult=null)
Applies one checker result.Information describing the domain-object mutations performed.