Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsForUnitPeriodCapacities ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  Boolean enableminconst, 
 | 
  Real totalmincapacity, 
 | 
  Real totalmaxcapacity, 
 | 
  const RunContextForCapacityPlanning runcontext, 
 | 
  const LibOpt_Scope scope, 
 | 
  const CapacityPlanningSuboptimizer subopt 
 | 
) const 
 | 
{ 
 | 
  Description: 'The constraint to limit the production of period tasks to be within defined capacity' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // defining minimum capacities for unit, Sum of PT Qty + not met >= UP.MinCapacity 
 | 
    // minconstup constraint UoM: Unit 
 | 
    minconstup := null(  MPConstraint ); 
 | 
    if( this.Unit().HasCapacityTypeTimeBase() ) 
 | 
    { 
 | 
      minconstup := program.MinUnitCapacityTimeConstraints().New( this ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      minconstup := program.MinUnitCapacityQtyConstraints().New( this ); 
 | 
    } 
 | 
     
 | 
    minconstup.Sense( '>=' ); 
 | 
     
 | 
    // RHS UoM: Unit 
 | 
    minconstup.RHSValue( subopt.ScaleConstraintRHS( typeofexpression( minconstup ), totalmincapacity ) ); 
 | 
    // Term UoM: Unit 
 | 
    var := this.GetCapacityNotMetVariable( program );  
 | 
     
 | 
    minconstup.NewTerm( 1.0 * subopt.ScaleConstraintTerm( typeofexpression(  var ), typeofexpression( minconstup ) ) 
 | 
                        , var ); 
 | 
    minconstup.Enabled( enableminconst ) 
 | 
     
 | 
    // defining maximum capacities for unit, Sum of PT Qty <= UP.AvailableCapacity 
 | 
    // maxconstup constraint UoM: Unit 
 | 
    maxconstup := null( MPConstraint ); 
 | 
    if( this.Unit().HasCapacityTypeTimeBase() ) 
 | 
    { 
 | 
      maxconstup := program.MaxUnitCapacityTimeConstraints().New( this ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      maxconstup := program.MaxUnitCapacityQtyConstraints().New( this ); 
 | 
    } 
 | 
     
 | 
    // When using shift optimization, total capacity depends on the shift patterns selected by the optimizer. 
 | 
    if( this.IsInScopeForShiftOptimization( scope ) and runcontext.UseShiftOptimization() ){ 
 | 
      maxconstup.RHSValue( 0 ); 
 | 
       
 | 
      unitperiod := this.astype( UnitPeriodTimeBase ); 
 | 
      unitperiod.AddTermsForMaximumCapacity( program, subopt, maxconstup, runcontext ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      // RHS UoM: Unit 
 | 
      maxconstup.RHSValue( subopt.ScaleConstraintRHS( typeofexpression( maxconstup ), totalmaxcapacity ) ); 
 | 
    } 
 | 
     
 | 
    maxconstup.Sense( '<=' ); 
 | 
    maxconstup.Enabled( not this.IsPlannedInfinite() ); 
 | 
     
 | 
    this.InitConstraintsForCapacityUsage( program, minconstup, maxconstup, runcontext, scope, subopt ); 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |