Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Create (LibOpt_Run owner, RealVector kpi_pre, RealVector kpi_post,  
 | 
  LibOpt_RollbackKPI rollback_kpi, Boolean is_rollback) as LibOpt_SnapshotSuboptimizer 
 | 
{ 
 | 
  Description: 'Create a new snapshot of type `LibOpt_SnapshotSuboptimizer`.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    change := kpi_post.Minus( kpi_pre ); 
 | 
     
 | 
    // Calculate the real vector to set for `Improvement`. 
 | 
    improvement := LibOpt_SnapshotSuboptimizer::GetImprovements( rollback_kpi, change ); 
 | 
     
 | 
    // Calculate the value to set for `IsImprovement`. 
 | 
    diff_index := LibOpt_RollbackKPI::GetDiffIndex( kpi_post, kpi_pre ); 
 | 
    is_improvement := diff_index >= 0 and diff_index < improvement.Size() and improvement.Get( diff_index ) > 0.0; 
 | 
     
 | 
    return owner.Snapshot( relnew, LibOpt_SnapshotSuboptimizer, 
 | 
                           Improvement := improvement.AsBinaryValue(), 
 | 
                           IsImprovement := is_improvement, 
 | 
                           IsRollback := is_rollback, 
 | 
                           NrKPILevels := improvement.Size() 
 | 
                         ); 
 | 
  *] 
 | 
} 
 |