| Quintiq file version 2.0 | 
| #parent: #root | 
| Method InitConstraintsForCampaignMinDurationWithin ( | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, | 
|   const LibOpt_Scope scope | 
| ) const | 
| { | 
|   TextBody: | 
|   [* | 
|     mindurwithin_constname := typeof( MPMinCampaignElementTypeDurationWithinConstraint ); | 
|     scalefactor_DurationWithin_const := this.ScaleConstraintTerm( typeof( MPDurationOfCampaignElementTypeMidVariable ), mindurwithin_constname ); | 
|     scalefactor_NrOfElementsWithin_const := this.ScaleConstraintTerm( typeof( MPNrOfCampaignElementWithinUnitSubPeriodVariable ), mindurwithin_constname ); | 
|     scalefactor_MinElementTypeDurationUnderWithin_const := this.ScaleConstraintTerm( typeof( MPMinCampaignElementTypeDurUnderWithinVariable ), mindurwithin_constname ); | 
|      | 
|     durzero := Duration::Zero(); | 
|      | 
|     traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements.OptCampaignUnitSubPeriod, ocusp ) | 
|     { | 
|       //Only do this for campaign / transitions that have a MinDuration (and thus, MinDuration is greater than 0 ) | 
|       traverse( ocusp, OptCampaignCombiElement.OptCampaignElementType, ocet, ocet.MinDuration() > durzero ) | 
|       { | 
|         constr := program.MinCampaignElementTypeDurationWithinConstraints().New( ocet, ocusp ); | 
|         constr.RHSValue( 0.0 ); | 
|          | 
|         durvar := program.DurationOfCampaignElementTypeMidVariables().Get( ocet, ocusp ); | 
|         constr.NewTerm( 1.0 * scalefactor_DurationWithin_const,durvar );  | 
|          | 
|         //If this is a transition, we want these constraints to be hard ones | 
|         if( not ocet.istype( OptCampaignTransitionType ) ) | 
|         { | 
|           constr.NewTerm( 1.0 * scalefactor_MinElementTypeDurationUnderWithin_const, program.MinCampaignElementTypeDurUnderWithinVariables().Get( ocet, ocusp ) ); | 
|         } | 
|         constr.NewTerm( -ocet.MinDuration().HoursAsReal() * scalefactor_NrOfElementsWithin_const, program.NrOfCampaignElementWithinUnitSubPeriodVariables().Get( ocet, ocusp ) ); | 
|       } | 
|     } | 
|   *] | 
| } |