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