Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method StopForBenchmarking ( 
 | 
  LibOpt_Task task, 
 | 
  SnapshotMacroPlannerOptimizer lastsnapshot, 
 | 
  RunContextForCapacityPlanning runcontext, 
 | 
  Real scoreforlevel 
 | 
) as Boolean 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    value := false;  
 | 
    targetscore := this.BenchmarkingStopScore();  
 | 
    if ( targetscore.IsFinite() ) // not finite means not set  
 | 
    { 
 | 
      ispenalty := targetscore <= 0;  
 | 
      lowquality := this.BenchmarkingStopFraction();  
 | 
       
 | 
      factor_low := ifexpr( ispenalty, 2.0 - lowquality , lowquality );  
 | 
       
 | 
      // 0.98 quality we translate to absolute treshold -0.0002 in case target = 0.    
 | 
      cutoff_low := ifexpr(  targetscore = 0 , (lowquality-1) / 100, factor_low * targetscore);  
 | 
      scorefraction := ifexpr(  targetscore = 0, scoreforlevel, (scoreforlevel / targetscore).Round( 5 ) );   
 | 
      value := scoreforlevel >= cutoff_low;   
 | 
      debuginfo(  'Stop score for benchmarking:', cutoff_low,  
 | 
                  'Target = ', targetscore,  
 | 
                  'current score fraction = ', scorefraction,  
 | 
                  '(needed = ', factor_low, ')',  
 | 
                  'stop = ', value );   
 | 
      lastsnapshot.BenchmarkingScoreFraction( scorefraction );  
 | 
      lastsnapshot.BenchmarkingTargetScore( targetscore );  
 | 
    } 
 | 
    value := value and runcontext.IsForBenchmarking(); // we still want to log above stats in case we are not benchmarking, but only use this during benchmarking 
 | 
    return value; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |