| Quintiq file version 2.0 | 
| #parent: #root | 
| Method Execute ( | 
|   AlgorithmRun algorithmrun, | 
|   Units units, | 
|   Period_MPs periods, | 
|   OptimizerPuzzle optimizerpuzzle | 
| ) as stream[JSON] | 
| { | 
|   TextBody: | 
|   [* | 
|     run := LibOpt_Run::Create( this ); | 
|      | 
|     outscope := LibOpt_Scope::Create( run );  | 
|     traverse( this.DefaultScope(), Elements, se, not se.istype( OptimizerPuzzleInOptimizerRun ) and not se.istype( PeriodInOptimizerRun ) )  | 
|     { | 
|       outscope.Add( se );  | 
|     } | 
|     traverse( periods, Elements, p )  | 
|     { | 
|       outscope.Add( p );  | 
|     } | 
|      | 
|     outscope.Add( optimizerpuzzle );  | 
|      | 
|     run.SetStartScope( outscope );  | 
|      | 
|     periodstart := minselect(  periods, Elements, p, true, p.Start() );  | 
|     periodend := maxselect(  periods, Elements, p, true, p.Start() );  | 
|      | 
|     context := RunContextForCapacityPlanning::Create( run, units, periodstart, periodend );  | 
|     context.Initialize( algorithmrun );  | 
|      | 
|     this.CreateComponents( run );  | 
|      | 
|     // save used settings to active settings, so we save the last used when the user kicks off a run  | 
|     mp := periodstart.MacroPlan();  | 
|     this.ActiveSettings().astype( OptimizerFullRunSettings ).SaveLastUsedSettings( null( RunContextMeta ), optimizerpuzzle.Name(), mp.StrategyMacroPlan().Name(), periodstart.StartDate(), periodend.StartDate() );  | 
|      | 
|     return run.Start(); | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |