Quintiq file version 2.0
|
#parent: #root
|
Method SetFeedBackQuantities (
|
MacroPlan mp,
|
RunContextForCapacityPlanning runcontext,
|
LibOpt_Scope scope
|
)
|
{
|
TextBody:
|
[*
|
if ( runcontext.IsMetaIteration() )
|
{
|
ptcount := 0;
|
periods := scope.GetPeriodInOptimizerRun();
|
traverse( mp, Unit.Operation, operation, operation.FeedbackPeriodTaskOperation( relsize ) > 0 or operation.HasMinimumQuantity() )
|
{
|
traverse( periods, Elements, period, PeriodTaskOperation::GetIsValidPeriodTask( operation, period ) ) // we don't want to plan feedback in frozen unit periods for example
|
{
|
operationmin := 0.0;
|
if( runcontext.UseProcessMinimumQuantity()
|
and operation.HasMinimumQuantity()
|
and period.IsWithinLotSizeHorizon() )
|
{
|
operationmin := operation.MinimumQuantity();
|
}
|
|
feedbackqty := sum( operation,
|
FeedbackPeriodTaskOperation,
|
feedback,
|
feedback.GetIsValidFeedback()
|
and feedback.UnitPeriod().Period_MP() = period,
|
feedback.FeedbackQuantity() );
|
|
pt := select( operation, PeriodTaskOperation, ptask, true, ptask.UnitPeriod().Period_MP() = period );
|
largestlowerbound := maxvalue( feedbackqty, operationmin );
|
|
if ( largestlowerbound > 0 )
|
{
|
if ( isnull( pt ) )
|
{
|
up := select( operation, Unit.UnitPeriod, uperiod, uperiod.Period_MP() = period );
|
pt := PeriodTaskOperation::CreateValidPeriodTask( operation,
|
up,
|
0.0,
|
false );
|
}
|
if ( guard( pt.Quantity() < largestlowerbound, false )
|
and ( not feedbackqty = 0 and pt.Quantity() = 0 ) ) // in this case 0 UNION [operationmin, infty ) is the bound on the variable ( semi continues)
|
{
|
pt.SetOptimizerQuantity( largestlowerbound );
|
debuginfo( 'Pre processing Period = ', period.Start(), 'operation=', operation.Name(), 'feedback = ', feedbackqty, 'lowerbound set = ', largestlowerbound );
|
|
ptcount++;
|
}
|
}
|
}
|
}
|
|
Transaction::Transaction().Propagate ( attribute( PeriodTaskOperation, QuantityToProcess ) );
|
Transaction::Transaction().Propagate ( attribute( PeriodTaskOperation, Quantity ) );
|
|
this.PlanFeedbackPIT( scope, runcontext );
|
|
Transaction::Transaction().Propagate( attribute( ProductInTrip, Quantity ) );
|
|
debuginfo( 'Planned feedback for #periotaskoperation = ', ptcount );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|