| Quintiq file version 2.0 | 
| #parent: #root | 
| Method InitVariablesForUnitPeriods ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   const LibOpt_Scope scope | 
| ) const | 
| { | 
|   Description: 'Initialize the variables for unit periods that is used for capacity calculation, campaign, etc' | 
|   TextBody: | 
|   [* | 
|     unitperiods := construct( UnitPeriods, constcontent ); | 
|      | 
|     traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements, up )  | 
|     { | 
|       unitperiods.Add( up ); | 
|       parentunitperiods := up.GetAllParentsOfUnitDimension(); | 
|       unitperiods := unitperiods.Union( parentunitperiods ); | 
|     } | 
|     unitperiods := unitperiods.Unique(); | 
|     // Initialize the variables | 
|     traverse( unitperiods, Elements, unitperiod, not ( unitperiod.Unit().HasChild() and unitperiod.Unit().HasCapacityTypeInfinite() ) ) | 
|     { | 
|       this.InitVariablesForUnitPeriod( program, unitperiod, scope ); | 
|     } | 
|      | 
|     runcontext := this.GetRunContextConst() | 
|     if( not runcontext.UseCampaignSequenceOptimizer() and runcontext.UseCampaign() ) | 
|     { | 
|       traverse( scope.GetUnitInOptimizerRunConst(), Elements.CampaignType_MP, type )   | 
|       { | 
|         // Only consider this campaign if at least one of its operations is part of this optimizer run | 
|         traverse( type, Campaign_MP, campaign, | 
|                   exists( campaign, OperationInCampaign.Operation, operation, | 
|                           scope.Contains( operation.OperationInOptimizerRun() ) ) ) | 
|         { | 
|           // MinCampaignQuantityUnder variable UoM: Unit | 
|           program.MinCampaignQtyUnderVariables().New( campaign ); | 
|           // MaxCampaignQtyOver variable UoM: Unit | 
|           program.MaxCampaignQtyOverVariables().New( campaign ); | 
|      | 
|      | 
|           // Only consider the campaingperiod if its unit period is part of this optimizer run | 
|           traverse( campaign, PlanningCampaignPeriod, cp, | 
|                     guard( scope.Contains(  cp.UnitPeriod().UnitPeriodInOptimizerRun() ), false ) ) | 
|           { | 
|             // CampaignPeriodOverloaded variable UoM: Unit or Time | 
|             program.CampaignPeriodOverloadedVariables().New( cp ); | 
|           } | 
|         } | 
|       } | 
|        | 
|       traverse( scope.GetUnitInOptimizerRunConst(),  | 
|                 Elements.TransitionType_MP.Transition_MP.TransitionPeriod_MP,  | 
|                 tperiod,  | 
|                 exists( tperiod, Transition_MP.OperationInTransition.OperationInTransitionType.Operation, operation, scope.Contains( operation.OperationInOptimizerRun() ) ) ) | 
|       { | 
|         program.TransitionPeriodOverloadedVariables().New( tperiod );  | 
|       } | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |