| Quintiq file version 2.0 | 
| #parent: #root | 
| Method InitializeOptimizerRun ( | 
|   Boolean issmartplan, | 
|   Boolean issmartplanforperiodtask, | 
|   Boolean hastotalsupplyuser, | 
|   Real totalsupplyuser, | 
|   ProductInStockingPointInPeriodPlannings smartplanpispips, | 
|   Boolean isupstreamsmartplan, | 
|   Boolean ismiddleoutsmartplan, | 
|   Boolean isonlyplanonestepupstream, | 
|   Boolean ispostprocessing, | 
|   Boolean isforcenoautoscaling, | 
|   Strategy strategy, | 
|   Boolean isoverridemanualplanning, | 
|   Period_MP periodstart, | 
|   Period_MP periodend, | 
|   Boolean isinventoryoptimizationrun, | 
|   Boolean isusingselectedunits, | 
|   Units units, | 
|   Process_MP process, | 
|   OptimizerPuzzle optimizerpuzzle | 
| ) as AlgorithmRun | 
| { | 
|   Description: 'Copy the setting from scenario manager and run the optimizer asynchronous. Make selection meta or regular based on attribute.' | 
|   TextBody: | 
|   [* | 
|     //copy strategy setting to globalparameter | 
|     if ( not isnull( strategy ) ) // calling with null( Strategy ) means re-using existing StrategyMacroPlan | 
|     { | 
|       this.DuplicateStrategySettings( strategy, false );  | 
|       if ( not isnull( strategy.ScenarioManager() ) ) // for LibOpt_BT we use a workaround of creating some dummy strategy so we can query for KPIs stored on the snapshots  | 
|       { | 
|         strategy.ScenarioManager().ActiveStrategy( relset, strategy ); | 
|       } | 
|     } | 
|      | 
|     // Change lastUsedOptimizer OptimizerPuzzle | 
|     if( not isnull( optimizerpuzzle ) ) | 
|     {  | 
|       optimizerpuzzle.ChangeLastUsedOptimizerPuzzle(); | 
|     } | 
|      | 
|     // Clean up data, remove the redundant data in the dataset. | 
|     this.RemoveUnusedInstancesBeforeOptimizerRun(); | 
|      | 
|     runsync := this.GlobalParameters_MP().RunSmartPlanSynchronously() and issmartplan;  | 
|     // Set the optimizer status to running | 
|     if ( not runsync )  | 
|     { | 
|       runningsync := true;  | 
|       sm := Util::GetScenarioManagerStream();  | 
|       sm->UpdateScenarioOptimizerStatus( this.MDSID(),  | 
|                                          Translations::MP_GlobalParameters_GetOptimizerRunningStatus(),  | 
|                                          ifexpr( runningsync, '', Translations::MP_GlobalParameters_GetOptimizerRunningLevel(1, counter( strategy, StrategyLevel, strategyLevel, strategyLevel.KPIWeight( relsize ) > 0 ) ) ), //When running synchronously, it is not possible to update the levels running. | 
|                                          "" ); | 
|     } | 
|      | 
|     // Update the algorithm parameters | 
|     this.GetAlgorithmParameter().Update( issmartplan, | 
|                                          issmartplanforperiodtask,  | 
|                                          hastotalsupplyuser, | 
|                                          totalsupplyuser, | 
|                                          isupstreamsmartplan, | 
|                                          ismiddleoutsmartplan, | 
|                                          isonlyplanonestepupstream, | 
|                                          ispostprocessing, | 
|                                          isforcenoautoscaling, | 
|                                          isoverridemanualplanning, | 
|                                          isinventoryoptimizationrun, | 
|                                          isusingselectedunits,  | 
|                                          runsync ); | 
|                                                     | 
|     // Set the optimizer settings and parameters | 
|     algrun := this.UpdateParameters( smartplanpispips, | 
|                                      this.StrategyMacroPlan(), | 
|                                      periodstart,  | 
|                                      periodend ); | 
|      | 
|      | 
|     if ( isnull( periodstart ) or isnull( periodend ) ) | 
|     { | 
|       AlgorithmRun::GetLastOptimizationHorizon( algrun, this, periodstart, periodend ); | 
|     } | 
|     return algrun; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |