Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method GetDurationForAutoTune ( 
 | 
  LibOpt_Snapshot snapshot, 
 | 
  output Real avgdurationseconds_o, 
 | 
  output Real averagenbhsize_o, 
 | 
  output Number nroksnapshots_o, 
 | 
  output Boolean anyfriendsadded_o 
 | 
) as Boolean 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    nrsnapshots := 0;   
 | 
    totalduration := 0.0;  
 | 
    totalneigborhoodsize := 0;  
 | 
    lastiterationhassolution := false;   
 | 
    anyfriendsadded_o := false;  
 | 
    windowsize := ifexpr(  this.InitialAggressiveSizeAdapt(), 1, SelectorMeta::WindowSizeForAutotune() );  
 | 
    nrofsnapshotmacroplannerchecked := 0;  
 | 
    while ( not isnull( snapshot ) and nrsnapshots < windowsize )  
 | 
    { 
 | 
      if ( snapshot.istype( SnapshotMacroPlannerOptimizer )  
 | 
           and snapshot.astype(  SnapshotMacroPlannerOptimizer ).FocusLevel() = this.FocusLevel() )  
 | 
      { 
 | 
        nrofsnapshotmacroplannerchecked++;  
 | 
        mysnapshot := snapshot.astype( SnapshotMacroPlannerOptimizer ); 
 | 
     
 | 
        if ( mysnapshot.Comment() = Translations::LibOpt_SnapshotKPI_CommentPostHandleResult() 
 | 
             and mysnapshot.DurationSecondsSolveSubOptimizer().IsFinite() )  
 | 
        {  
 | 
          if ( nrofsnapshotmacroplannerchecked = 1 )  
 | 
          { 
 | 
            lastiterationhassolution := true;  
 | 
          } 
 | 
          nrsnapshots++;  
 | 
          totalduration := totalduration + mysnapshot.DurationSecondsSolveSubOptimizer();  
 | 
          totalneigborhoodsize := totalneigborhoodsize + mysnapshot.NrPISPIPPlanningOptimizerRun();  
 | 
          anyfriendsadded_o := anyfriendsadded_o or mysnapshot.SelectorAddedFriends();  
 | 
        } 
 | 
      } 
 | 
      snapshot := snapshot.PreviousOnRun();  
 | 
    } 
 | 
    if ( nrsnapshots > 0 )  
 | 
    { 
 | 
      avgdurationseconds_o := totalduration / nrsnapshots;  
 | 
      averagenbhsize_o := totalneigborhoodsize / nrsnapshots;  
 | 
    } 
 | 
    nroksnapshots_o := nrsnapshots;  
 | 
    return lastiterationhassolution; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |