Quintiq file version 2.0
|
#parent: #root
|
Method CapacityPlanningAlgorithmHandleFeasibleOperationDependentDemandInputGroup (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
PeriodTaskOperation periodtaskoperation,
|
const RunContextForCapacityPlanning runcontext
|
)
|
{
|
Description: 'Assign the optimal quantity from optimizer for dependent demand in input group.'
|
TextBody:
|
[*
|
// Dependent demand of input group fulfillment
|
ptperiod := periodtaskoperation.UnitPeriod().Period_MP();
|
operation := periodtaskoperation.Operation();
|
getfromperiodtask := this.GetPeriodsFromPeriodTaskOperation();
|
traverse( periodtaskoperation,
|
DependentDemandInputGroup,
|
dd,
|
dd.HasRegularProductForOptimizer() or dd.OperationInput().GetIsProductInOptimizerRun( runcontext.IsPostProcessing() ) )
|
{
|
fulfilledqty := 0.0;
|
|
if( operation.HasLeadTime() ) // Get the dependent demands that is located at different period from the period of period task.
|
{
|
// compute dependent demand periods
|
pispipperiods := construct( Period_MPs, constcontent );
|
if ( getfromperiodtask ) // in case we are able to get from period tasks, below method refinds periodtask for (operation, ptperiod) i.e. periodtaskoperation and then output dep.demand periods
|
{
|
traverse( periodtaskoperation, DependentDemand.ProductInStockingPointInPeriodPlanningLeaf.Period_MP, ddperiod )
|
{
|
pispipperiods.Add( ddperiod );
|
}
|
}
|
else
|
{
|
CapacityPlanningSuboptimizer::GetOperationDependentDemandPeriods( ptperiod, operation, &pispipperiods, getfromperiodtask );
|
}
|
|
fulfilledqty := sum( pispipperiods, Elements, pispipperiod,
|
this.GetOptimalValue( program.PartialOperationDemandQtyVariables().Get( dd.OperationInput(), pispipperiod, ptperiod ) ) );
|
if ( runcontext.IsMetaIteration() and operation.IsBlending() ) // no filtering for numerical sensitive blending operation in meta optimizer
|
{
|
fulfilledqty := sum( pispipperiods, Elements, pispipperiod,
|
this.GetOptimalValueUnfiltered( program.PartialOperationDemandQtyVariables().Get( dd.OperationInput(), pispipperiod, ptperiod ) ) );
|
}
|
}
|
else
|
{
|
// note that in case there is no lead time then the set of dependent demand periods just equals the singleton set {ptperiod}
|
fulfilledqty := this.GetOptimalValue( program.OperationDemandQtyVariables().Get( dd.OperationInput(), ptperiod ) );
|
if( runcontext.IsMetaIteration() and operation.IsBlending() ) // no filtering for numerical sensitive blending operation in meta optimizer
|
{
|
fulfilledqty := this.GetOptimalValueUnfiltered( program.OperationDemandQtyVariables().Get( dd.OperationInput(), ptperiod ) );
|
}
|
}
|
|
dd.OptimizerFulfilledQuantity( fulfilledqty );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|