Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsForCampaignCombiSelection ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    onecampaignpercombi_constname := typeof( MPOneCampaignCombiPerOptSubUnitPeriodConstraint ); 
 | 
    scalefactor_underselectionsubperiod_const := this.ScaleConstraintTerm( typeof( MPUnderSelectionOfCampaignCombiVariable ), onecampaignpercombi_constname ); 
 | 
    scalefactor_iscampaigncombiselected_const := this.ScaleConstraintTerm( typeof( MPIsCampaignCombiSelectedVariable ), onecampaignpercombi_constname ); 
 | 
    scalefactor_rhs_onecampaignpercombi_constname := this.ScaleConstraintRHS( onecampaignpercombi_constname, 1.0 ); 
 | 
     
 | 
    traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements.OptCampaignUnitSubPeriod, ocusp ) 
 | 
    { 
 | 
      onecombictr := program.OneCampaignCombiPerOptSubUnitPeriodConstraints().New( ocusp ) 
 | 
      onecombictr.RHSValue( 1.0 * scalefactor_rhs_onecampaignpercombi_constname ) 
 | 
      onecombictr.Sense( "=" ) 
 | 
      varunderselection := program.UnderSelectionOfCampaignCombiVariables().Get( ocusp ) 
 | 
      onecombictr.NewTerm( 1.0 * scalefactor_underselectionsubperiod_const, varunderselection ) 
 | 
      traverse( ocusp, OptCampaignCombiActive, combi ) 
 | 
      { 
 | 
        varcombiselected := program.IsCampaignCombiSelectedVariables().Get( combi ) 
 | 
        onecombictr.NewTerm( 1.0 * scalefactor_iscampaigncombiselected_const,varcombiselected ) 
 | 
      } 
 | 
    } 
 | 
     
 | 
    traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements.OptCampaignUnitSubPeriod, ocusp ) 
 | 
    { 
 | 
      traverse( ocusp, OptCampaignCombiActive, combi ) 
 | 
      { 
 | 
        varcombiselected := program.IsCampaignCombiSelectedVariables().Get( combi ) 
 | 
         
 | 
        //Check if multiperiod, which means we need to add it to more periods 
 | 
        if( combi.IsMultiPeriodsCombi() ) 
 | 
        { 
 | 
          traverse( combi, OptCampaignCombiElement.OptCampaignUnitSubPeriod, ocuspadditional, ocusp <> ocuspadditional ) 
 | 
          { 
 | 
            onecombiconst := program.OneCampaignCombiPerOptSubUnitPeriodConstraints().Get( ocuspadditional ); 
 | 
            onecombiconst.NewTerm( 1.0 * scalefactor_iscampaigncombiselected_const,varcombiselected ); 
 | 
          } 
 | 
        } 
 | 
        
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |