Quintiq file version 2.0
|
#parent: #root
|
MethodOverride InitVariablesForPostponedSalesDemands (
|
const CapacityPlanningSuboptimizer subopt,
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const LibOpt_Scope scope,
|
Number optminpostponementperiod,
|
Boolean shelflifevaronly
|
) const
|
{
|
TextBody:
|
[*
|
if( this.AggregatedSalesDemandInPeriod().CanBePostponed() and this.AggregatedSalesDemandInPeriod().NeedsToBePlanned() )
|
{
|
pispip := this.AsPlanningBaseSalesDemandInPeriod();
|
nextpispip := pispip.NextPlanningPISPIP();
|
|
for( i := 2;
|
i <= optminpostponementperiod
|
and not isnull( nextpispip );
|
i++
|
)
|
{
|
nextpispip := nextpispip.NextPlanningPISPIP();
|
}
|
|
for( i := optminpostponementperiod;
|
i <= this.MaxPostponementPeriod() // within the maximum number of postponement periods
|
and not isnull( nextpispip );
|
i++ )
|
{
|
if( scope.Contains( nextpispip.PISPIPInOptimizerRun() ) )
|
{
|
nextperiod := nextpispip.Period_MP();
|
// DelayedDisaggregatedSalesDemandQty variable UoM: PISP
|
// look if variable is already defined, because we also init variable for the extra shelf life pispips prior to horizon
|
var := ifexpr( shelflifevaronly, program.DelayedDisaggregatedSalesDemandQtyVariables().Find( this, nextperiod ), null( MPVariable ) );
|
if ( isnull( var ) )
|
{
|
var := program.DelayedDisaggregatedSalesDemandQtyVariables().New( this, nextperiod );
|
upperbound := maxvalue( 0.0, this.AggregatedSalesDemandInPeriod().GetQuantityForOptimizer( scope ) );
|
subopt.FreezeVariableUpperBound( var, upperbound );
|
}
|
|
if ( nextpispip.ProductInStockingPoint_MP().IsOptShelfLife() )
|
{
|
traverse( nextpispip, ProductInStockingPoint_MP.IncomingShelfLifeDay, islday )
|
{
|
// look if variable is already defined, because we also init variable for the extra shelf life pispips prior to horizon
|
dvar := program.DelayedDisaggregatedSalesDemandShelfLifeQtyVariables().Find( this, nextperiod, islday );
|
if ( isnull( dvar ) )
|
{
|
program.DelayedDisaggregatedSalesDemandShelfLifeQtyVariables().New( this, nextperiod, islday );
|
}
|
}
|
}
|
}
|
nextpispip := nextpispip.NextPlanningPISPIP();
|
}
|
}
|
*]
|
}
|