16 IReadOnlyList<ClosedLoopReturnStream> streams,
19 LotSizingSolution solution)
21 ArgumentNullException.ThrowIfNull(streams);
22 ArgumentNullException.ThrowIfNull(model);
23 ArgumentNullException.ThrowIfNull(solveResult);
24 ArgumentNullException.ThrowIfNull(solution);
26 IReadOnlyList<ClosedLoopDecisionSnapshot> snapshots =
33 solution.ClosedLoopDecisions.Clear();
35 foreach (IGrouping<int, ClosedLoopDecisionSnapshot> group
38 snapshot.ReturnStreamId))
41 new ClosedLoopDecision(
43 solution.PlanningHorizon);
48 decision.RecoveryInputs[snapshot.
Period] =
51 decision.DisposalQuantities[snapshot.
Period] =
54 decision.RecoveredOutputs[snapshot.
Period] =
58 solution.ClosedLoopDecisions.Add(
62 if (!solution.HasValidClosedLoopDecisions)
64 throw new InvalidOperationException(
65 "Mapped closed-loop decisions are not internally valid.");