Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsForCampaignCalcDurationOfElementTypeMid (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const LibOpt_Scope scope
|
) const
|
{
|
TextBody:
|
[*
|
campaigndurationmid_constname := typeof( MPCalcDurationOfElementTypeMidConstraint );
|
scalefactor_DurationOfCampaignElementTypeMid_const := this.ScaleConstraintTerm( typeof( MPDurationOfCampaignElementTypeMidVariable ), campaigndurationmid_constname );
|
scalefactor_NrOfCampaignElementsWithin_const := this.ScaleConstraintTerm( typeof( MPNrOfCampaignElementWithinUnitSubPeriodVariable ), campaigndurationmid_constname );
|
|
traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements.OptCampaignUnitSubPeriod, ocusp )
|
{
|
traverse( ocusp, OptCampaignCombiElement.OptCampaignElementType, ocet )
|
{
|
constr := program.CalcDurationOfElementTypeMidConstraints().New( ocet, ocusp );
|
|
// Durations of element type mid
|
durationelementmidtype := program.DurationOfCampaignElementTypeMidVariables().Get( ocet, ocusp );
|
constr.NewTerm( 1.0 * scalefactor_DurationOfCampaignElementTypeMid_const, durationelementmidtype );
|
|
//max element duration * nr elements in sub period
|
maxelementduration := minvalue( ifexpr( ocet.HasMaxDuration(), ocet.MaxDuration(), Duration::MaxDuration() ), ocusp.UnitPeriod().Duration() ).HoursAsReal();
|
nrelements := program.NrOfCampaignElementWithinUnitSubPeriodVariables().Get( ocet, ocusp );
|
constr.NewTerm( -maxelementduration * scalefactor_NrOfCampaignElementsWithin_const, nrelements );
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|