Quintiq file version 2.0
|
#parent: #root
|
Method InitVariablesForUnitPeriods (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const LibOpt_Scope scope
|
) const
|
{
|
Description: 'Initialize the variables for unit periods that is used for capacity calculation, campaign, etc'
|
TextBody:
|
[*
|
unitperiods := construct( UnitPeriods, constcontent );
|
|
traverse( scope.GetUnitPeriodInOptimizerRunConst(), Elements, up )
|
{
|
unitperiods.Add( up );
|
parentunitperiods := up.GetAllParentsOfUnitDimension();
|
unitperiods := unitperiods.Union( parentunitperiods );
|
}
|
unitperiods := unitperiods.Unique();
|
// Initialize the variables
|
traverse( unitperiods, Elements, unitperiod, not ( unitperiod.Unit().HasChild() and unitperiod.Unit().HasCapacityTypeInfinite() ) )
|
{
|
this.InitVariablesForUnitPeriod( program, unitperiod, scope );
|
}
|
|
runcontext := this.GetRunContextConst()
|
if( not runcontext.UseCampaignSequenceOptimizer() and runcontext.UseCampaign() )
|
{
|
traverse( scope.GetUnitInOptimizerRunConst(), Elements.CampaignType_MP, type )
|
{
|
// Only consider this campaign if at least one of its operations is part of this optimizer run
|
traverse( type, Campaign_MP, campaign,
|
exists( campaign, OperationInCampaign.Operation, operation,
|
scope.Contains( operation.OperationInOptimizerRun() ) ) )
|
{
|
// MinCampaignQuantityUnder variable UoM: Unit
|
program.MinCampaignQtyUnderVariables().New( campaign );
|
// MaxCampaignQtyOver variable UoM: Unit
|
program.MaxCampaignQtyOverVariables().New( campaign );
|
|
|
// Only consider the campaingperiod if its unit period is part of this optimizer run
|
traverse( campaign, PlanningCampaignPeriod, cp,
|
guard( scope.Contains( cp.UnitPeriod().UnitPeriodInOptimizerRun() ), false ) )
|
{
|
// CampaignPeriodOverloaded variable UoM: Unit or Time
|
program.CampaignPeriodOverloadedVariables().New( cp );
|
}
|
}
|
}
|
|
traverse( scope.GetUnitInOptimizerRunConst(),
|
Elements.TransitionType_MP.Transition_MP.TransitionPeriod_MP,
|
tperiod,
|
exists( tperiod, Transition_MP.OperationInTransition.OperationInTransitionType.Operation, operation, scope.Contains( operation.OperationInOptimizerRun() ) ) )
|
{
|
program.TransitionPeriodOverloadedVariables().New( tperiod );
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|