| Quintiq file version 2.0 | 
| #parent: #root | 
| Method CapacityPlanningAlgorithmInitConstraints_ParallelTypeA ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   const constcontent ProductInStockingPointInPeriodPlannings pispipssmartplan, | 
|   const constcontent PeriodTaskOperations userperiodtasks, | 
|   const LibOpt_Task task, | 
|   const constcontent ProductInStockingPointInPeriodPlannings pispipsinrun, | 
|   constcontent ProductInStockingPointInPeriodPlanningLeafs leafpispipsinrun, | 
|   const constcontent ProductInStockingPoint_MPs pispsinrun, | 
|   const constcontent ProductInTrips pitinrun | 
| ) const | 
| { | 
|   TextBody: | 
|   [* | 
|     runcontext := this.GetRunContextConst();  | 
|     runcontextmeta := this.GetRunContextMeta();  | 
|     start := OS::PrecisionCounter();  | 
|     scope := task.Scope();  | 
|      | 
|     this.SetPTVarProperties( program, userperiodtasks, scope ) // set bounds for PTQty vars but also BigM constraint in case of process min qty | 
|      | 
|     // >> constraints here need the existing plan prior to resetting the manual quantities   | 
|     this.InitConstraintsForInventoryCarriedForward( program, this.Setting_Applyusersupplycorrection_CarriedFWDInventory(),  scope, pispipsinrun ); // needs inventory levels past the optimizer scope so future demand is not broken  | 
|     this.AdditionalConstraintMaxInventory( program, scope, runcontext, runcontextmeta ); // same remark as above | 
|     // << | 
|      | 
|     // The following methods create the constraints | 
|     // The optimizer solution design document explains how to consider scaling | 
|     // and unit of measurement when modifying constraints or creating new constraints | 
|     thread := 0;  | 
|     this.InitConstraintsForOperationDependentDemands( program, runcontext, scope, thread ); | 
|     this.InitConstraintsForOperationDependentDemandInputGroup( program, runcontext, scope ); | 
|     this.InitConstraintsForOperationDependentDemandInputSet( program, runcontext, scope ); | 
|     this.InitConstraintsForOperationDependentDemandInPeriod( program, runcontext, scope ); | 
|     this.InitConstraintsForTripDependentDemands( program, scope, pitinrun, thread ); | 
|     // type C this.InitConstraintsForUnitPeriods( program, runcontext, scope ); | 
|      | 
|     //Depending on the EnableCampaingSequncingOptimizer in Global params either the manual sequenced campaign optimizer will run or the new campain seuqencing optimizer will run | 
|     this.InitConstraintsForCampaignsManualSequenced( program, runcontext, scope );  | 
|     this.InitConstraintsForCampaignSequencing( program, runcontext, scope );  | 
|      | 
|     this.InitConstraintsForPISPIPs_TYPEA( program, pispipssmartplan, runcontext, scope, leafpispipsinrun, pispipsinrun, pispsinrun, pitinrun );  | 
|     // type B this.InitConstraintsForStockingPointInPeriods( program, runcontext, scope ); | 
|      | 
|     this.InitConstraintsForServiceLevel( program, runcontext, scope, leafpispipsinrun ); // only one of these  | 
|      | 
|     this.InitConstraintsForLotSizes( program, runcontext, scope ); | 
|     this.InitConstraintsForSupplySpecifications( program, runcontext, scope ); | 
|     this.InitConstraintsForBlending( program, runcontext, scope ); | 
|     this.InitConstraintsForOneTimeCost( program, runcontext, scope );  | 
|      | 
|     this.InitConstraintsForShiftPatterns( program, runcontext, scope ); | 
|      | 
|     this.InitializeAdditionalMeta( program, runcontextmeta, scope, runcontext.IsMetaIteration() )   | 
|      | 
|     this.InitConstraintsForGoals_TypeA( program, runcontext, scope, pispipsinrun, leafpispipsinrun, pispsinrun, pitinrun ); // keep last for meta because we obtained values from existing plan | 
|      | 
|     this.FilterCPLEXNoiseInitialization( program, runcontext ) | 
|      | 
|     end := OS::PrecisionCounter();  | 
|     durationtypea := (end - start) / OS::PrecisionCounterFrequency();  | 
|     program.StoreReal( 'type_A_constraints', durationtypea ); | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |