@@ -402,7 +402,8 @@ private static LinearOptimizationResult optimizeLinearRemedialActions(
402402 ObjectiveFunction objectiveFunction ) {
403403
404404 // -- Build IteratingLinearOptimizerInterTemporalInput
405- TemporalData <OptimizationPerimeter > optimizationPerimeterPerTimestamp = computeOptimizationPerimetersPerTimestamp (raoInput .getRaoInputs ().map (RaoInput ::getCrac ), initialResults , consideredCnecs );
405+ // Need to use postTopoResults to build perimeter because initialResults does not contain range action setpoints
406+ TemporalData <OptimizationPerimeter > optimizationPerimeterPerTimestamp = computeOptimizationPerimetersPerTimestamp (raoInput .getRaoInputs ().map (RaoInput ::getCrac ), postTopoResults , consideredCnecs );
406407 // no objective function defined in individual IteratingLinearOptimizerInputs as it is global
407408 Map <OffsetDateTime , IteratingLinearOptimizerInput > linearOptimizerInputPerTimestamp = new HashMap <>();
408409 raoInput .getRaoInputs ().getTimestamps ().forEach (timestamp -> linearOptimizerInputPerTimestamp .put (timestamp , IteratingLinearOptimizerInput .create ()
@@ -411,7 +412,7 @@ private static LinearOptimizationResult optimizeLinearRemedialActions(
411412 .withInitialFlowResult (initialResults .getData (timestamp ).orElseThrow ())
412413 .withPrePerimeterFlowResult (initialResults .getData (timestamp ).orElseThrow ())
413414 .withPreOptimizationFlowResult (postTopoResults .getData (timestamp ).orElseThrow ())
414- .withPrePerimeterSetpoints (initialResults .getData (timestamp ).orElseThrow ())
415+ .withPrePerimeterSetpoints (postTopoResults .getData (timestamp ).orElseThrow ()) //use postTopoResults because initial does not contain setpoints
415416 .withPreOptimizationSensitivityResult (postTopoResults .getData (timestamp ).orElseThrow ())
416417 .withPreOptimizationAppliedRemedialActions (curativeRemedialActions .getData (timestamp ).orElseThrow ())
417418 .withToolProvider (ToolProvider .buildFromRaoInputAndParameters (raoInput .getRaoInputs ().getData (timestamp ).orElseThrow (), parameters ))
@@ -454,17 +455,17 @@ private static boolean doesPrePerimeterSetpointRespectRange(RangeAction<?> range
454455 }
455456 }
456457
457- private static TemporalData <OptimizationPerimeter > computeOptimizationPerimetersPerTimestamp (TemporalData <Crac > cracs , TemporalData <PrePerimeterResult > prePerimeterResults , TemporalData <Set <String >> consideredCnecs ) {
458+ private static TemporalData <OptimizationPerimeter > computeOptimizationPerimetersPerTimestamp (TemporalData <Crac > cracs , TemporalData <? extends RangeActionSetpointResult > prePerimeterSetpointResults , TemporalData <Set <String >> consideredCnecs ) {
458459 TemporalData <OptimizationPerimeter > optimizationPerimeters = new TemporalDataImpl <>();
459460 cracs .getTimestamps ().forEach (timestamp -> {
460461 Crac crac = cracs .getData (timestamp ).orElseThrow ();
461- PrePerimeterResult prePerimeterResult = prePerimeterResults .getData (timestamp ).orElseThrow ();
462+ RangeActionSetpointResult prePerimeterSetpointResult = prePerimeterSetpointResults .getData (timestamp ).orElseThrow ();
462463 optimizationPerimeters .add (timestamp , new PreventiveOptimizationPerimeter (
463464 crac .getPreventiveState (),
464465 MarmotUtils .getFilteredCnecs (crac , consideredCnecs .getData (timestamp ).orElseThrow ()),
465466 new HashSet <>(),
466467 new HashSet <>(),
467- crac .getRangeActions (crac .getPreventiveState (), UsageMethod .AVAILABLE ).stream ().filter (rangeAction -> doesPrePerimeterSetpointRespectRange (rangeAction , prePerimeterResult )).collect (Collectors .toSet ())
468+ crac .getRangeActions (crac .getPreventiveState (), UsageMethod .AVAILABLE ).stream ().filter (rangeAction -> doesPrePerimeterSetpointRespectRange (rangeAction , prePerimeterSetpointResult )).collect (Collectors .toSet ())
468469 ));
469470 });
470471 return optimizationPerimeters ;
0 commit comments