Quintiq file version 2.0
|
#parent: #root
|
MethodOverride Operation (
|
LibOpt_Task task
|
) as stream[JSON]
|
{
|
TextBody:
|
[*
|
debuginfo( 'Pre processing' );
|
runcontext := RunContextForCapacityPlanning::GetRunContextCapacityPlanning( task.Run() );
|
|
this.ClearSalesDemandBelowThreshold( task );
|
this.CreateSupportData( task, runcontext ); // trips, product in trips, periodtaskoperation ( in case of meta ). combis in case of campaign optimization
|
|
if ( runcontext.IsMetaIteration() )
|
{
|
rcm := RunContextMeta::GetRunContextMeta( task.Run() );
|
|
mp := this.Optimization().astype( Optimization ).MacroPlan();
|
eis := mp.OptimizerMetaEIS();
|
eis.FocusLevelForEIS( -1 ); // triggers EIS in the 1st operation of meta selector, because levels start at 0
|
eis.BaseForTried( rcm.OptionBaseForTried() );
|
eis.BaseForTriedAsFriend( rcm.OptionBaseForTriedAsFried() );
|
eis.BaseForPeriodDecay( rcm.OptionStartBaseForPeriodDecay() ); // slowly move towards 1
|
eis.BaseForDecayNrTimeInScope( rcm.OptionBaseForDecayNrTimeInScope() );
|
OptimizerMeta::ResetIsTried( selectset( mp, PlanningPeriod, p, true, true ) );
|
Transaction::Transaction().Propagate(); // compute estimated improvements scores after above changes
|
|
opt := mp.Optimization();
|
gp := mp.GlobalParameters_MP();
|
opstart := runcontext.FirstPeriod_MP().StartDate();
|
optend := runcontext.LastPeriod_MP().EndDate();
|
|
if ( not isnull( opt.AlgorithmScaling() ) )
|
{
|
opt.AlgorithmScaling().ScaleFactorsSuggestedForLevel( relflush );
|
}
|
|
mp.Optimization().PruneProductInTrips( mp, task ); // remove product in trips meta optimizer detects as useless
|
|
changed := false;
|
gp.StartOfKPIHorizonForMetaRollback( gp.StartOfKPIHorizon() );
|
gp.EndOfKPIHorizonForMetaRollback( gp.EndOfKPIHorizon() );
|
if ( gp.GetStartOfKPIHorizon() > opstart )
|
{
|
gp.StartOfKPIHorizonForMetaRollback( opstart );
|
changed := true;
|
}
|
if ( gp.GetEndOfKPIHorizon() < optend )
|
{
|
gp.EndOfKPIHorizonForMetaRollback( optend );
|
changed := true;
|
}
|
if ( changed )
|
{
|
Transaction::Transaction().Propagate( attribute( Period_MP, IsWithinKPIHorizon ) );
|
}
|
|
this.SetFeedBackQuantities( eis.MacroPlan(), runcontext, task.Scope() );
|
runcontext.SetPeriodTaskOperationUser( runcontext.HasOverwrittenManualPlanning(), task.Scope(), true ); // for meta optimizer we want to set it once
|
runcontext.SetProductInTripManualQuantity( runcontext.HasOverwrittenManualPlanning(), task.Scope(), true ); // and not each iteration based on scope
|
}
|
this.Optimization().astype( Optimization ).MacroPlan().SetServiceLevelBaseIDs();
|
this.SetMaxPostponementPeriodForPISPs();
|
|
this.StoreInitialInventoryViolations( runcontext );
|
|
return this.Continue( task, task.Scope() );
|
*]
|
}
|