Quintiq file version 2.0 
 | 
#parent: #root 
 | 
MethodOverride Initialize ( 
 | 
  const LibOpt_Task task, 
 | 
  MathematicalProgram program_basetype 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    debuginfo( 'Synchronous start = ', DateTime::ActualTime() );  
 | 
    scope := task.Scope();  
 | 
    runcontext := this.GetRunContextConst();   
 | 
    pispipssmartplan := scope.GetSmartPlanPISPIPsInOptimizerRunConst();  
 | 
     
 | 
    userperiodtasks := runcontext.GetUserPeriodTaskOperationsConst();  
 | 
    userproductintrips :=runcontext.GetUserProductInTrips();  
 | 
    pispipsinrun := scope.GetPISPIPInOptimizerRunConst();  
 | 
    leafpispipsinrun := selectset(  pispipsinrun, Elements.astype(  ProductInStockingPointInPeriodPlanningLeaf ), pispip, true, true );  
 | 
    pispsinrun := scope.GetProductInStockingPointInOptimizerRunConst();  
 | 
    pitinrun := scope.GetProductInTripInOptimizerRunConst();  
 | 
     
 | 
    // use Algorithm_MP to create the math program 
 | 
    program := program_basetype.astype( CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm );  
 | 
     
 | 
    this.CapacityPlanningAlgorithmInitInstance( program, runcontext, scope );   
 | 
     
 | 
    this.CapacityPlanningAlgorithmInitVariables( program, runcontext, userperiodtasks, userproductintrips, pispipssmartplan, scope, pispipsinrun, leafpispipsinrun, pispsinrun, pitinrun );  
 | 
     
 | 
    this.SetStartSolutionForPTLotSizes( program, runcontext, scope );  
 | 
     
 | 
    this.SetStartSolutionForCampaignSequencing( program, runcontext, scope );  
 | 
     
 | 
    this.CapacityPlanningAlgorithmInitGoals( program, runcontext, scope  );// workaround we should add the goal after cloning because otherwise the goal term constant become = nr of threads.  
 | 
     
 | 
    this.CapacityPlanningAlgorithmInitConstraints_ParallelTypeA( program, pispipssmartplan, userperiodtasks, task, pispipsinrun, leafpispipsinrun, pispsinrun, pitinrun  );  
 | 
     
 | 
    this.CapacityPlanningAlgorithmInitConstraints_ParallelTypeB( program, pispipssmartplan, task, pispipsinrun, leafpispipsinrun, pispsinrun, pitinrun );  
 | 
     
 | 
    this.CapacityPlanningAlgorithmInitConstraints_ParallelTypeC( program, pispipssmartplan, task, pispipsinrun, leafpispipsinrun, pispsinrun, pitinrun );  
 | 
     
 | 
    // note we run this.FilterCPLEXNoiseInitialization( program, runcontext ) in above parallel threads (filters RHS of constraints) 
 | 
    // meaning this filtering is excluded from any constraints added below.  
 | 
     
 | 
    this.InitConstraintsSequentialAtEnd( program, runcontext, scope, leafpispipsinrun ); 
 | 
     
 | 
    //Generate names for debugging purposes 
 | 
    //this method should already generate names only if needed (sav file saved, MPAnalysis on,...) so no need to add an if statement 
 | 
    program.GenerateNames() 
 | 
    isdisplay := not runcontext.IsInventoryOptimizationRun();  
 | 
    if( isdisplay ) 
 | 
    { 
 | 
      progress( 'Invoking CPLEX', DateTime::ActualTime() ); 
 | 
      info( 'Invoking CPLEX', DateTime::ActualTime() ); 
 | 
    } 
 | 
  *] 
 | 
} 
 |