| 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' } | 
| } |