Quintiq file version 2.0
|
#parent: #root
|
Method CaptureForOTS (
|
LibOpt_Task task
|
)
|
{
|
TextBody:
|
[*
|
nrdecimals := 3;
|
opt := this.Run().Optimization().astype( Optimization );
|
mp := opt.MacroPlan();
|
runcontext := select( this, Run.RunContext.astype( RunContextForCapacityPlanning ), rc, true, true );
|
|
if ( runcontext.IsOTSCollectAllKPIData() or not runcontext.IsMetaIteration() ) // for meta optimizer it becomes quite expensive to collect all KPIs each iteration. So we have an optimizer setting option to turn this off
|
{
|
this.KPICampaign( mp.GetKPICampaign().Round( nrdecimals ) );
|
campaignscore := 0.0;
|
transscore := 0.0;
|
uncoveredpenalty := 0.0;
|
sequencepenalty := 0.0;
|
utilscore := 0.0;
|
RollbackKPIMeta::GetCampaignScore( runcontext, mp, campaignscore, transscore, utilscore );
|
RollbackKPIMeta::GetCampaignCombiSlackScore( mp, uncoveredpenalty, sequencepenalty, runcontext.UseCampaignSequenceOptimizer() );
|
this.OptCampaignCampaignScore( campaignscore.Round( nrdecimals ) );
|
this.OptCampaignTransitionScore( transscore.Round( nrdecimals ) );
|
this.OptCampaignUncoveredPenalty( uncoveredpenalty.Round( nrdecimals ) );
|
this.OptCampaignUtilizationScore( utilscore.Round( nrdecimals ) );
|
this.OptCampaignSequencePenalty( sequencepenalty.Round( nrdecimals ) );
|
|
this.KPIFulfillment( mp.GetKPIFulfillment().Round( nrdecimals ) );
|
this.KPIFulfillmentPercentage( mp.GetKPIFulfillmentInPercentage().Round( nrdecimals ) );
|
|
this.KPIFulfillmentTarget( mp.GetKPIFulfillmentTarget().Round( nrdecimals ) );
|
this.KPIFulfillmentTargetAbsolute( mp.GetKPIFulfillmentTargetAbsolute().Round( nrdecimals ) );
|
this.KPIFulfillmentTargetOpt( mp.GetKPIFulfillmentTargetOpt().Round( nrdecimals ) );
|
this.KPIFulfillmentTargetPercentage( mp.GetKPIFulfillmentTargetPercentage().Round( nrdecimals ) );
|
|
this.KPIInputLotSize( mp.GetKPIInputLotSizeContinuous().Round( nrdecimals ) );
|
this.KPILotSizeTrip( mp.GetKPILotSizeTripContinuous().Round( nrdecimals ) );
|
this.KPILotSizeOperation( mp.GetKPILotSizeOperationContinuous().Round( nrdecimals ) );
|
this.KPILotSizeTotal( mp.GetKPILotSizeTotal().Round( nrdecimals ) );
|
|
this.KPIInventoryMixBalancing( mp.GetKPIInventoryMixBalancing().Round( nrdecimals ) );
|
|
this.KPITargetInventoryLevel( mp.GetKPITargetInventoryLevel().Round( nrdecimals ) );
|
this.KPITargetInventoryPercentage( mp.GetKPITargetInventoryLevelInPecentage().Round( nrdecimals ) );
|
|
this.KPIMaximumInventoryLevel( mp.GetKPIMaximumInventoryLevel().Round( nrdecimals ) );
|
|
this.KPIMinimumInventoryLevel( mp.GetKPIMinimumInventoryLevel().Round( nrdecimals ) );
|
|
this.KPIMaximumSupply( mp.GetKPIMaximumSupply().Round( nrdecimals ) );
|
|
this.KPIMinimumSupply( mp.GetKPIMinimumSupply().Round( nrdecimals ) );
|
|
this.KPIMinimumUnitCapacity( mp.GetKPIMinimumUnitCapacity().Round( nrdecimals ) );
|
this.KPIUnitCapacityNotMet( mp.GetKPIUnitCapacityNotMet().Round( nrdecimals ) );
|
|
this.KPIPostponementPenalty( mp.GetKPIPostponementPenalty().Round( nrdecimals ) );
|
|
this.KPIProcessMaximumQuantity( mp.GetKPIProcessMaximumQuantity().Round( nrdecimals ) );
|
|
this.KPIProcessMinimumQuantity( mp.GetKPIProcessMinimumQuantity().Round( nrdecimals ) );
|
|
this.KPISalesDemandPriority( mp.GetKPISalesDemandPriority().Round( nrdecimals ) );
|
|
this.KPIStockingPointCapacity( mp.GetKPIStockingPointCapacity().Round( nrdecimals ) );
|
|
this.KPIServiceLevel( mp.GetKPIServiceLevel().Round( nrdecimals ) );
|
|
this.KPISupplyTarget( mp.GetKPISupplyTarget().Round( nrdecimals ) );
|
|
this.KPIUnitCapacity( mp.GetKPIUnitCapacity().Round( nrdecimals ) );
|
|
this.KPITotalExpiredQuantity( mp.GetKPITotalExpiredQuantity().Round( nrdecimals ) );
|
|
this.KPIBalanceViolation( mp.GetKPIBalanceViolation().Round( nrdecimals ) );
|
|
this.KPIFixedCost( mp.GetKPIFixedCost().Round( nrdecimals ) );
|
this.KPIChangeover( mp.GetKPIChangeover().Round( nrdecimals ) );
|
this.KPIDirectCost( mp.GetKPIDirectCost().Round( nrdecimals ) );
|
this.KPIInventoryHoldingCost( mp.GetKPIInventoryHoldingCost().Round( nrdecimals ) );
|
this.KPIInventorySupplyCost( mp.GetKPIInventorySupplyCost().Round( nrdecimals ) );
|
this.KPIInventoryTurns( mp.GetKPIInventoryTurns().Round( nrdecimals ) );
|
this.KPIMargin( mp.GetKPIMargin().Round( nrdecimals ) );
|
this.KPIOnTimeFulfillment( mp.GetKPIOnTimeFulfillment().Round( nrdecimals ) );
|
this.KPIOnTimeInFull( mp.GetKPIOnTimeInFull().Round( nrdecimals ) );
|
this.KPISales( mp.GetKPISales().Round( nrdecimals ) );
|
this.KPIVolume( mp.GetKPIVolume().Round( nrdecimals ) );
|
|
this.KPIBlending( mp.GetKPIBlending( runcontext.SmallestFeasibilityTolerance() ).Round( nrdecimals ) );
|
|
kpi := RealVector::Construct( this.RollbackKPI() );
|
opt.BT_ScoreL0( guard( kpi.Get( 0 ), 0.0 ) );
|
opt.BT_ScoreL1( guard( kpi.Get( 1 ), 0.0 ) );
|
opt.BT_ScoreL2( guard( kpi.Get( 2 ), 0.0 ) );
|
opt.BT_ScoreL3( guard( kpi.Get( 3 ), 0.0 ) );
|
opt.BT_ScoreL4( guard( kpi.Get( 4 ), 0.0 ) );
|
opt.BT_ScoreL5( guard( kpi.Get( 5 ), 0.0 ) );
|
opt.BT_ScoreL6( guard( kpi.Get( 6 ), 0.0 ) );
|
|
this.CreateKPIParts( task.Scope() );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|