Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method RemoveUnusedTripsAfterSmartPlan ( 
 | 
  LibOpt_Task task 
 | 
) 
 | 
{ 
 | 
  Description: 'Remove the unused trips and product in trips after running optimizer, to reduce memory consumption' 
 | 
  TextBody: 
 | 
  [* 
 | 
    if ( not isnull( task.TaskContext() ) ) 
 | 
    { 
 | 
      tripsInOptimizerScope := construct( Trips ); 
 | 
      unusedpits := construct( ProductInTrips ); 
 | 
      nrofunusedtrip :=0; 
 | 
       
 | 
      macroplan := this.Optimization().astype( Optimization ).MacroPlan();  
 | 
      taskcontext := task.TaskContext().astype( TaskContextSmartPlan );  
 | 
      taskcontext.GetUnusedPIT( &unusedpits, nrofunusedtrip ); 
 | 
       
 | 
      alltripsinrun := selectset( taskcontext, ProductInTrip.Trip, trip, true, true ); 
 | 
      totaltripinrun := alltripsinrun.Size();  
 | 
       
 | 
      usedpercentage := guard( ( ( totaltripinrun - nrofunusedtrip )/ totaltripinrun * 100 ), 0 ); 
 | 
       
 | 
      minpercentage := macroplan.GlobalParameters_MP().MinToKeepTripInUsedPercentage(); 
 | 
       
 | 
      debuginfo(  'total trips in run = ', totaltripinrun, 'used % = ', usedpercentage, 'unused pit=', unusedpits.Size() );  
 | 
      // delete if use percentage < minimum percentage 
 | 
      if ( usedpercentage <  minpercentage ) 
 | 
      { 
 | 
        // Delete the productintrips that were part of the optimizer run, that have an optimizer quantity of 0, 
 | 
        // that are not manual planning and that do not have feedback 
 | 
        ProductInTrip::Delete( unusedpits ); 
 | 
       
 | 
        tripsInOptimizerScope := selectset( alltripsinrun, Elements, trip,  
 | 
                                            trip.ProductInTrip( relsize ) = 0 ); 
 | 
      }                                       
 | 
       
 | 
      tripsOutOfScope := selectset( macroplan, Unit.Lane.LaneLeg.Trip, trip,  
 | 
                                      not ( trip.HasValidArrival() and trip.HasValidDeparture() ) ); 
 | 
       
 | 
      tripsToDelete := tripsInOptimizerScope.Union( tripsOutOfScope ).Unique(); 
 | 
      Trip::Delete( tripsToDelete ); 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |