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 ) );
|
}
|
}
|
*]
|
}
|