| Quintiq file version 2.0 | 
| #parent: #root | 
| Method InitConstraintsGoalsForSlacks ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   const RunContextForCapacityPlanning runcontext, | 
|   const LibOpt_Scope scope, | 
|   const constcontent ProductInStockingPointInPeriodPlannings pispipsinrun | 
| ) const | 
| { | 
|   Description: 'The constraint to compute the total slacks per category used in the algorithm.' | 
|   TextBody: | 
|   [* | 
|     // The total user supply slack is equal to the sum of all user supply slacks | 
|     if( runcontext.GetConsiderTotalUserSupply( scope ) ) | 
|     { | 
|       totalslackuserconstrname := typeof( MPTotalSlackUserSupplyConstraint ); | 
|        | 
|       scalefactor_totalslackusersupply_totalslackuserconstr := this.ScaleConstraintTerm( typeof( MPTotalSlackUserSupplyVariable ), totalslackuserconstrname ); | 
|       scalefactor_usertotalsupplyover_totalslackuserconstr := this.ScaleConstraintTerm( typeof( MPUserTotalSupplyOverVariable ), totalslackuserconstrname ); | 
|       scalefactor_usertotalsupplyunder_totalslackuserconstr := this.ScaleConstraintTerm( typeof( MPUserTotalSupplyUnderVariable ), totalslackuserconstrname ); | 
|        | 
|       // totalslackuserconstr constraint UoM: Default | 
|       totalslackuserconstr := program.TotalSlackUserSupplyConstraints().New(); | 
|       totalslackuserconstr.Sense( '=' ); | 
|       // RHS UoM: Default | 
|       totalslackuserconstr.RHSValue( 0.0 ); | 
|      | 
|       // Term UoM: Default | 
|       totalslackuserconstr.NewTerm( -1.0 * scalefactor_totalslackusersupply_totalslackuserconstr, program.TotalSlackUserSupplyVariables().Get() ); | 
|      | 
|       // Add regular UserTotalSupply slacks | 
|       pispipstoadd := runcontext.GetPISPISPForUserSupplyConstraint( scope, pispipsinrun ) // only add slack variables for those pispips where we define user supply constraints | 
|       traverse( pispipstoadd, Elements, pispip )  | 
|       { | 
|         { | 
|           uomconversion := pispip.ProductInStockingPoint_MP().DefaultUOMConversionFactor(); | 
|      | 
|           // Term: uomconversion   * UserTotalSupply Slack variable | 
|           // UoM:  [PISP to Default] *      [PISP] | 
|           totalslackuserconstr.NewTerm( uomconversion * scalefactor_usertotalsupplyover_totalslackuserconstr, program.UserTotalSupplyOverVariables().Get( pispip ) ); | 
|           totalslackuserconstr.NewTerm( uomconversion * scalefactor_usertotalsupplyunder_totalslackuserconstr, program.UserTotalSupplyUnderVariables().Get( pispip ) ); | 
|         } | 
|       } | 
|        | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |