Quintiq file version 2.0
|
#parent: #root
|
Method CreatePeriodTaskInCombiElements (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
CapacityPlanningSuboptimizer suboptimizer
|
)
|
{
|
TextBody:
|
[*
|
traverse( this, OptCampaignCombiElement, combielement )
|
{
|
optelementtype := combielement.OptCampaignElementType();
|
|
traverse( optelementtype, OptCampaignOperationInElementType, optoperationinelementtype )
|
{
|
operation := optoperationinelementtype.Operation();
|
combielementoptsubunitperiod := combielement.OptCampaignUnitSubPeriod();
|
|
varptqtyinelementtypestart := program.PTQtyInCampaignElementTypeStartVariables().Get( optoperationinelementtype, combielementoptsubunitperiod );
|
quantitystart := suboptimizer.GetOptimalValue( varptqtyinelementtypestart );
|
|
varptqtyinelementtypemid := program.PTQtyInCampaignElementTypeMidVariables().Get( optoperationinelementtype, combielementoptsubunitperiod );
|
quantitymid := suboptimizer.GetOptimalValue( varptqtyinelementtypemid );
|
|
varptqtyinelementtypeend := program.PTQtyInCampaignElementTypeEndVariables().Get( optoperationinelementtype, combielementoptsubunitperiod );
|
quantityend := suboptimizer.GetOptimalValue( varptqtyinelementtypeend );
|
|
finalquantity := 0.0;
|
|
if( combielement.IsFirstElementInUnitSubPeriod()
|
and combielement.IsLastElementInUnitSubPeriod() )
|
{
|
// Sum all the quantities in an OptSubUnitPeriod if a element spans the whole OptSubUnitPeriod
|
finalquantity := quantitystart + quantityend;
|
}
|
else if( combielement.IsFirstElementInUnitSubPeriod() ) // first not last
|
{
|
// Set the quantity to the value of the variable PTQtyInElementTypeStart if an OptCampaignCombiElement is the first element of an OptSubUnitPeriod
|
finalquantity := quantitystart;
|
}
|
else if( combielement.IsLastElementInUnitSubPeriod() ) // last not first
|
{
|
// Set the quantity to the value of the variable PTQtyInElementTypeEnd if an OptCampaignCombiElement is the last element of an OptSubUnitPeriod
|
finalquantity := quantityend;
|
}
|
else // middle element
|
{
|
// Distribute the quantity evenly
|
nrofmidelements := counter( this, OptCampaignCombiElement, ele,
|
not ele.IsFirstElementInUnitSubPeriod()
|
and not ele.IsLastElementInUnitSubPeriod()
|
and ele.OptCampaignUnitSubPeriod() = combielementoptsubunitperiod
|
and ele.OptCampaignElementType() = optelementtype );
|
finalquantity := quantitymid / nrofmidelements;
|
}
|
|
optperiodtaskincombielement := OptCampaignPeriodTaskInCombiElement::Create( combielement, operation );
|
optperiodtaskincombielement.Quantity( finalquantity );
|
}
|
}
|
*]
|
}
|