Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method GetSSGForTuning () as SolverSettingGroup 
 | 
{ 
 | 
  Description: 'Select the SSG that should be tried on this strategylevel in the next tuning run' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Martijn Apr-11-2016 (created) 
 | 
    solversettinggroup := this.SolverSettingGroup(); 
 | 
     
 | 
    // If there is at least one SolverSettingGroup that has not been tested on this strategy level 
 | 
    if( exists( this, SSGInStrategyLevel, ssginsl, not ssginsl.IsTested() ) ) 
 | 
    // select the first SolverSettingGroup that is not tested in alphabetical order 
 | 
    { 
 | 
      solversettinggroup := guard( minselect( this, SSGInStrategyLevel, ssginsl,           // Select the SSGInStrategyLevel for which 
 | 
                                              not ssginsl.IsTested(),                      // The solver setting group has not been tested on the strategy level 
 | 
                                              ssginsl.SolverSettingGroupName()             // select the first in alphabetical order 
 | 
                                            ).SolverSettingGroup(),                        // Select the SSG of this SSGInStrategyLevel 
 | 
                                   null( SolverSettingGroup ) ); 
 | 
    } 
 | 
    // if the combination of the best settings on eahc level have not yet been tested for this strategy 
 | 
    else if( not this.Strategy().HasTestedBestSSG() ) 
 | 
    { 
 | 
      // Select the solversettingroup with the shortest last duration on this level 
 | 
      solversettinggroup := guard( minselect( this, SSGInStrategyLevel, ssginsl, true, ssginsl.LastDuration() ).SolverSettingGroup(), 
 | 
                                   null( SolverSettingGroup ) ); 
 | 
      // If this is the last strategy level, set the HasTestedBestSSG of the strategy to true 
 | 
      if( not exists( this, Next.KPIWeight, kpiweight, kpiweight.Weight() > 0 and kpiweight.Level() > 0 ) ) 
 | 
      { 
 | 
        this.Strategy().HasTestedBestSSG( true ); 
 | 
      } 
 | 
    } 
 | 
    else if( this.IsActiveTuningLevel() ) 
 | 
    { 
 | 
      // Select the solver setting group with the oldest last tuning run on this level. If equal, select the one with the shortest duration. 
 | 
      solversettinggroup := guard( minselect( this, SSGInStrategyLevel, ssginsl, 
 | 
                                              true, 
 | 
                                              ssginsl.DateLastTuningRun(),           // Select the solversettinggroup with the oldest last tuning run 
 | 
                                              ssginsl.LastDuration()                 // If equal, select the one with the shortest duration 
 | 
                                            ).SolverSettingGroup(),                  // Select the SSG of this SSGInSL 
 | 
                                   null( SolverSettingGroup ) ); 
 | 
    } 
 | 
    // Otherwise select the solversettinggroup that is currently the default 
 | 
    else 
 | 
    { 
 | 
      solversettinggroup := guard( this.SolverSettingGroup(), null( SolverSettingGroup ) ); 
 | 
    } 
 | 
     
 | 
    return solversettinggroup; 
 | 
  *] 
 | 
} 
 |