| Quintiq file version 2.0 | 
| #parent: #root | 
| Method RemoveUnusedOperationPeriodTaskAfterOptimizerRun ( | 
|   LibOpt_Scope scope, | 
|   RunContextForCapacityPlanning runcontext, | 
|   PeriodTaskOperations userperiodtasks | 
| ) | 
| { | 
|   Description: 'Remove the period task with quantity = 0 after running optimizer, to reduce memory consumption' | 
|   TextBody: | 
|   [* | 
|     noisethreshold := this.Optimization().astype( Optimization ).MacroPlan().GlobalParameters_MP().NoiseThresholdOptimizerOutput(); | 
|      | 
|     unitperiods := selectset(  scope.GetPeriodInOptimizerRun(),  | 
|                                Elements.UnitPeriod,  | 
|                                up,  | 
|                                true,  | 
|                                not up.IsPeriodFrozen() );  | 
|      | 
|     periodtasks := selectset(  unitperiods,  | 
|                                Elements.PeriodTask_MP.astype( PeriodTaskOperation ),  | 
|                                periodtask,  | 
|                                not periodtask.HasFeedback() | 
|                                and abs(  periodtask.OptimizerQuantity() )  < noisethreshold );  | 
|     periodtasks := periodtasks.Difference( userperiodtasks );   // Remove those with manual planning quantity set to 0. | 
|      | 
|     debuginfo( 'Removed period tasks  = ', periodtasks.Size() );  | 
|     traverse( periodtasks, Elements, pt ) | 
|     { | 
|       pt.Delete(); | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |