| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride CreateRun () as LibOpt_Run | 
| { | 
|   TextBody: | 
|   [* | 
|     mp := this.Optimization().astype( Optimization ).MacroPlan();  | 
|     settings := this.ActiveSettings().astype( OptimizerMetaSettings );  | 
|     puzzle := select( mp, OptimizerPuzzle, puzzle, true, puzzle.Name() = settings.PuzzleName() );  | 
|      | 
|     periodstart := minselect( mp, Period_MP, p, not p.IsHistorical(), p.StartDate() );  | 
|     periodend := mp.LastPlanningPeriod();  | 
|      | 
|     this.Optimization().astype( Optimization ).GetPeriodsForOTS( periodstart, periodend, settings );  | 
|      | 
|     issmartplan := false;  | 
|     issmartplanforperiodtask := false;   | 
|     hastotalsupplyuser := false;  | 
|     totalsupplyuser := 0.0;  | 
|     smartplanpispips := null( ProductInStockingPointInPeriodPlanningLeafs );  | 
|     isupstreamsmartplan := false;  | 
|     ismiddleoutsmartplan := false;  | 
|     isonlyplanonestepupstream := false;  | 
|     ispostprocessing := false;  | 
|     isforcenoautoscaling := true;  | 
|     isoverridemanualplanning := settings.OverrideManualPlanning();  | 
|     isinventoryoptimizationrun := false;  | 
|     isusingselectedunits := false;  | 
|     units := null( Units );  | 
|     process := null( Process_MP );  | 
|      | 
|     strategy := null( Strategy );  | 
|     if ( isnull( mp.StrategyMacroPlan() ) ) // use exising strategy if exists (for regular optimizer run this will have been set,  | 
|     {                                       // for OTS we have a workaround via method  LibOpt_BT_RunSequenceElement.MyMethodTemp that copies the strategy | 
|                                             // only thing we support at the moment for 'play' button from libopt optimizer from is to repeat for strategy that has been run already | 
|                                             // for updating target KPIs for LibOpt_BT benchmark application we create the following bogus strategy | 
|       strategy := construct( Strategy, Name := 'dummy workaround' );  | 
|       strategy.StrategyLevel( relnew, Level := 0, StrategyName := strategy.Name(), SolverSettingGroupName := 'Default' );  | 
|     }                                                           | 
|      | 
|     // fetch legacy algorithmrun object (still used for benchmark runs LibOBT) | 
|     algrun := mp.InitializeOptimizerRun( issmartplan,  | 
|                                          issmartplanforperiodtask,  | 
|                                          hastotalsupplyuser,  | 
|                                          totalsupplyuser,  | 
|                                          smartplanpispips,  | 
|                                          isupstreamsmartplan,  | 
|                                          ismiddleoutsmartplan,  | 
|                                          isonlyplanonestepupstream,  | 
|                                          ispostprocessing, | 
|                                          isforcenoautoscaling,  | 
|                                          strategy,  | 
|                                          isoverridemanualplanning,  | 
|                                          periodstart,  | 
|                                          periodend,  | 
|                                          isinventoryoptimizationrun,  | 
|                                          isusingselectedunits,  | 
|                                          units,  | 
|                                          process,  | 
|                                          puzzle );   | 
|      | 
|     run := super.CreateRun();  | 
|     run :=this.CreateRunWithContexts( algrun, run, units, periodstart, periodend );  | 
|      | 
|     rcm := select( run, RunContext.astype( RunContextMeta ), rc, true, true );  | 
|      | 
|     // put OTS settings onto runcontext meta | 
|     rcm.OptionAutoTuneNeighborhoodSize( settings.OptionAutoTuneNeighborhoodSize() );  | 
|     rcm.OptionMaxNumberOfPISPIPSForNeighborhood( settings.OptionMaxNumberOfPISPIPSForNeighborhood() );  | 
|     rcm.OptionMaxNumberOfPISPIPSForNeighborhoodOriginal( rcm.OptionMaxNumberOfPISPIPSForNeighborhood() );  | 
|     rcm.OptionRollbackAlwaysAccept( settings.OptionRollbackAlwaysAccept() );  | 
|     rcm.OptionStopOnInfeasible( settings.OptionStopOnInfeasible());  | 
|      | 
|     return run; | 
|   *] | 
| } |