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' } 
 | 
} 
 |