Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsGoalsForCampaignLimitations ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    totalmaxqtyover_constname := typeof( MPTotalCampaignMaxQtyOverConstraint ); 
 | 
    scalefactor_totalmaxqtyover_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMaxQtyOverVariable ), totalmaxqtyover_constname ); 
 | 
    scalefactor_maxqtyoverwithin_const := this.ScaleConstraintTerm( typeof( MPMaxCampaignElementTypeQtyOverWithinVariable ), totalmaxqtyover_constname ); 
 | 
    scalefactor_maxqtyovermultiperiod_const := this.ScaleConstraintTerm( typeof( MPMaxCampaignElementTypeQtyOverMultiPeriodVariable ), totalmaxqtyover_constname ); 
 | 
     
 | 
    totalminqtyunder_constname := typeof( MPTotalCampaignMinQtyUnderConstraint ); 
 | 
    scalefactor_totalminqtyunder_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMinQtyUnderVariable ), totalminqtyunder_constname ); 
 | 
    scalefactor_minqtyunderwithin_const := this.ScaleConstraintTerm( typeof( MPMinCampaignElementTypeQtyUnderWithinVariable ), totalminqtyunder_constname ); 
 | 
    scalefactor_minqtyundermulti_const := this.ScaleConstraintTerm( typeof( MPMinCampaignElementTypeQtyUnderMultiVariable ), totalminqtyunder_constname ); 
 | 
     
 | 
    totalmindurunder_constname := typeof( MPTotalCampaignMinDurUnderConstraint ); 
 | 
    scalefactor_totalmindurunder_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMinDurationUnderVariable ), totalmindurunder_constname ); 
 | 
    scalefactor_mindurunderwithin_const := this.ScaleConstraintTerm( typeof( MPMinCampaignElementTypeDurUnderWithinVariable ), totalmindurunder_constname ); 
 | 
    scalefactor_mindurundermulti_const := this.ScaleConstraintTerm( typeof( MPMinCampaignElementTypeDurUnderMultiVariable ), totalmindurunder_constname ); 
 | 
     
 | 
    totalmaxdurover_constname := typeof( MPTotalCampaignMaxDurOverConstraint ); 
 | 
    scalefactor_totalmaxdurover_const := this.ScaleConstraintTerm( typeof( MPTotalCampaignMaxDurationOverVariable ), totalmaxdurover_constname ); 
 | 
    scalefactor_maxduroverwithin_const := this.ScaleConstraintTerm( typeof( MPMaxCampaignElementTypeDurOverWithinVariable ), totalmaxdurover_constname ); 
 | 
    scalefactor_maxdurovermulti_const := this.ScaleConstraintTerm( typeof( MPMaxCampaignElementTypeDurOverMultiVariable ), totalmaxdurover_constname ); 
 | 
       
 | 
    totalmaxqtyoverconstr := program.TotalCampaignMaxQtyOverConstraints().New(); 
 | 
    totalmaxqtyoverconstr.RHSValue( 0.0 ); 
 | 
    totalmaxqtyoverconstr.Sense( "=" ); 
 | 
    vartotalmaxqtyover := program.TotalCampaignMaxQtyOverVariables().Get();  
 | 
    totalmaxqtyoverconstr.NewTerm( 1.0 * scalefactor_totalmaxqtyover_const, vartotalmaxqtyover ); 
 | 
     
 | 
    totalminqtyunderconstr := program.TotalCampaignMinQtyUnderConstraints().New(); 
 | 
    totalminqtyunderconstr.RHSValue( 0.0 ); 
 | 
    totalminqtyunderconstr.Sense( "=" ); 
 | 
    vartotalminqtyunder := program.TotalCampaignMinQtyUnderVariables().Get();  
 | 
    totalminqtyunderconstr.NewTerm( 1.0 * scalefactor_totalminqtyunder_const, vartotalminqtyunder ); 
 | 
     
 | 
    totalmindurunderconstr := program.TotalCampaignMinDurUnderConstraints().New(); 
 | 
    totalmindurunderconstr.RHSValue( 0.0 ); 
 | 
    totalmindurunderconstr.Sense( "=" ); 
 | 
    vartotalmindurunder := program.TotalCampaignMinDurationUnderVariables().Get(); 
 | 
    totalmindurunderconstr.NewTerm( 1.0 * scalefactor_totalmindurunder_const, vartotalmindurunder ); 
 | 
     
 | 
    totalmaxduroverconstr := program.TotalCampaignMaxDurOverConstraints().New(); 
 | 
    totalmaxduroverconstr.RHSValue( 0.0 ); 
 | 
    totalmaxduroverconstr.Sense( "=" ); 
 | 
    vartotalmaxdurover := program.TotalCampaignMaxDurationOverVariables().Get(); 
 | 
    totalmaxduroverconstr.NewTerm( 1.0 * scalefactor_totalmaxdurover_const, vartotalmaxdurover ); 
 | 
     
 | 
    ocusps := selectset( scope.GetUnitPeriodInOptimizerRunConst(), Elements.OptCampaignUnitSubPeriod, ocusp, true ) 
 | 
     
 | 
    traverse( ocusps, Elements, ocusp ) 
 | 
    { 
 | 
      //If this is a transition, we want these constraints to be hard ones 
 | 
      //So we don't have these slack variables 
 | 
      traverse( ocusp, OptCampaignCombiElement.OptCampaignElementType, ocet, not ocet.istype( OptCampaignTransitionType ) ) 
 | 
      { 
 | 
        totalmaxqtyoverconstr.NewTerm( - 1.0 * scalefactor_maxqtyoverwithin_const, program.MaxCampaignElementTypeQtyOverWithinVariables().Get( ocet, ocusp ) ) 
 | 
        totalmaxqtyoverconstr.NewTerm( - 1.0 * scalefactor_maxqtyovermultiperiod_const, program.MaxCampaignElementTypeQtyOverMultiPeriodVariables().Get( ocet, ocusp ) ) 
 | 
        if ( isnull( ocusp.NextSubPeriod() ) ) 
 | 
        { 
 | 
          totalmaxqtyoverconstr.NewTerm( - 1.0 * scalefactor_maxqtyoverwithin_const, program.MaxCampaignElementTypeQtyOverWithinLastVariables().Get( ocet, ocusp ) ) 
 | 
        } 
 | 
         
 | 
        totalminqtyunderconstr.NewTerm( - 1.0 * scalefactor_minqtyunderwithin_const, program.MinCampaignElementTypeQtyUnderWithinVariables().Get( ocet, ocusp ) ) 
 | 
        totalminqtyunderconstr.NewTerm( - 1.0 * scalefactor_minqtyundermulti_const, program.MinCampaignElementTypeQtyUnderMultiVariables().Get( ocet, ocusp ) ) 
 | 
         
 | 
        totalmindurunderconstr.NewTerm( - 1.0 * scalefactor_mindurunderwithin_const, program.MinCampaignElementTypeDurUnderWithinVariables().Get( ocet, ocusp ) ); 
 | 
        totalmindurunderconstr.NewTerm( - 1.0 * scalefactor_mindurundermulti_const, program.MinCampaignElementTypeDurUnderMultiVariables().Get( ocet, ocusp ) ); 
 | 
         
 | 
        totalmaxduroverconstr.NewTerm( - 1.0 * scalefactor_maxduroverwithin_const, program.MaxCampaignElementTypeDurOverWithinVariables().Get( ocet, ocusp ) ); 
 | 
        totalmaxduroverconstr.NewTerm( - 1.0 * scalefactor_maxdurovermulti_const, program.MaxCampaignElementTypeDurOverMultiVariables().Get( ocet, ocusp ) ); 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
} 
 |