Quintiq file version 2.0
|
#parent: #root
|
Method CaptureMacroPlanKPIs (
|
RunContextForCapacityPlanning runcontext,
|
CapacityPlanningSuboptimizer subopt,
|
LibOpt_Scope scope
|
)
|
{
|
TextBody:
|
[*
|
mp := runcontext.Run().Optimization().astype( Optimization ).MacroPlan();
|
eis := mp.OptimizerMetaEIS();
|
isdebug := guard( eis.OptimizerMeta().Optimization().astype( Optimization ).DebugMode(), false );
|
|
|
if ( eis.CampaignWeight() > 0 )
|
{
|
this.KPICampaign( mp.GetKPICampaign() );
|
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 );
|
this.OptCampaignTransitionScore( transscore );
|
this.OptCampaignUncoveredPenalty( uncoveredpenalty );
|
this.OptCampaignUtilizationScore( utilscore );
|
this.OptCampaignSequencePenalty( sequencepenalty );
|
}
|
if ( eis.FulfillmentWeight() > 0 )
|
{
|
this.KPIFulfillment( mp.GetKPIFulfillment() );
|
this.KPIFulfillmentPercentage( mp.GetKPIFulfillmentInPercentage() );
|
}
|
if ( eis.FulfillmentTargetWeight() > 0 )
|
{
|
this.KPIFulfillmentTarget( mp.GetKPIFulfillmentTarget() );
|
this.KPIFulfillmentTargetAbsolute( mp.GetKPIFulfillmentTargetAbsolute() );
|
this.KPIFulfillmentTargetOpt( mp.GetKPIFulfillmentTargetOpt() );
|
this.KPIFulfillmentTargetPercentage( mp.GetKPIFulfillmentTargetPercentage() );
|
}
|
if ( eis.LotSizeWeight() > 0 )
|
{
|
this.KPIInputLotSize( eis.KPILotSizeInputContinuous() );
|
this.KPILotSizeTrip( eis.KPILotSizeTripContinuous() );
|
this.KPILotSizeOperation( eis.KPILotSizeOperationContinuous() );
|
this.KPILotSizeTotal( eis.KPILotSizeTotal() );
|
}
|
if ( eis.InventoryMixBalancingWeight() > 0 )
|
{
|
this.KPIInventoryMixBalancing( mp.GetKPIInventoryMixBalancing() );
|
}
|
if ( eis.TargetInventoryLevelWeight() > 0 )
|
{
|
this.KPITargetInventoryLevel( eis.KPITargetInventory() );
|
this.KPITargetInventoryPercentage( mp.GetKPITargetInventoryLevelInPecentage() );
|
}
|
if ( eis.MaximumInventoryLevelWeight() > 0 )
|
{
|
this.KPIMaximumInventoryLevel( eis.KPIMaximumInventory() );
|
}
|
if ( eis.MinimumInventoryLevelWeight() > 0 )
|
{
|
this.KPIMinimumInventoryLevel( eis.KPIMinimumInventory() );
|
}
|
if ( eis.MaximumSupplyWeight() > 0 )
|
{
|
this.KPIMaximumSupply( mp.GetKPIMaximumSupply() );
|
}
|
if ( eis.MinimumSupplyWeight() > 0 )
|
{
|
this.KPIMinimumSupply( mp.GetKPIMinimumSupply() );
|
}
|
if ( eis.MinimumUnitCapacityWeight() > 0 )
|
{
|
this.KPIMinimumUnitCapacity( mp.GetKPIMinimumUnitCapacity() );
|
this.KPIUnitCapacityNotMet( mp.GetKPIUnitCapacityNotMet() );
|
}
|
if ( eis.PostponementPenaltyWeight() > 0 )
|
{
|
this.KPIPostponementPenalty( mp.GetKPIPostponementPenalty() );
|
}
|
if ( eis.ProcessMaximumQuantityWeight() > 0 )
|
{
|
this.KPIProcessMaximumQuantity( mp.GetKPIProcessMaximumQuantity() );
|
}
|
if ( eis.ProcessMinimumQuantityWeight() > 0 )
|
{
|
this.KPIProcessMinimumQuantity( mp.GetKPIProcessMinimumQuantity() );
|
}
|
if ( eis.SalesDemandPriorityWeight() > 0 )
|
{
|
this.KPISalesDemandPriority( eis.KPISalesDemandPriority() ); // use attribute avoid expensive method call
|
}
|
if ( eis.StockingPointCapacityWeight() > 0 )
|
{
|
this.KPIStockingPointCapacity( mp.GetKPIStockingPointCapacity() );
|
}
|
if ( eis.ServiceLevelWeight() > 0 )
|
{
|
this.KPIServiceLevel( mp.GetKPIServiceLevel() );
|
}
|
if ( eis.SupplyTargetWeight() > 0 )
|
{
|
this.KPISupplyTarget( mp.GetKPISupplyTarget() );
|
}
|
if ( eis.UnitCapacityWeight() > 0 )
|
{
|
this.KPIUnitCapacity( mp.GetKPIUnitCapacity() );
|
}
|
if ( eis.ExpiredQtyWeight() > 0 )
|
{
|
this.KPITotalExpiredQuantity( mp.GetKPITotalExpiredQuantity() );
|
}
|
this.KPIBalanceViolation( eis.KPIBalanceViolation() );
|
|
if ( isdebug )
|
{
|
this.KPIFixedCost( mp.GetKPIFixedCost() );
|
this.KPIChangeover( mp.GetKPIChangeover() );
|
this.KPIDirectCost( mp.GetKPIDirectCost() );
|
this.KPIInventoryHoldingCost( mp.GetKPIInventoryHoldingCost() );
|
this.KPIInventorySupplyCost( mp.GetKPIInventorySupplyCost() );
|
this.KPIInventoryTurns( mp.GetKPIInventoryTurns() );
|
this.KPIMargin( mp.GetKPIMargin() );
|
this.KPIOnTimeFulfillment( mp.GetKPIOnTimeFulfillment() );
|
this.KPIOnTimeInFull( mp.GetKPIOnTimeInFull() );
|
this.KPISales( mp.GetKPISales() );
|
this.KPIVolume( mp.GetKPIVolume() );
|
|
// sub puzzle KPIs
|
pispips := scope.GetPISPIPInOptimizerRunConst();
|
uperiods := scope.GetUnitPeriodInOptimizerRunConst();
|
spips := scope.GetStockingPointInPeriodInOptimizerRunConst();
|
this.KPIMaximumInventoryLevelSubPuzzle( mp.GetKPIMaximumInventoryLevel( pispips ) );
|
this.KPIMinimumInventoryLevelSubPuzzle( mp.GetKPIMinimumInventoryLevel( pispips ) );
|
this.KPILotSizeTripSubPuzzle( mp.GetKPILotSizeTripContinuous( uperiods ) );
|
this.KPIUnitCapacitySubPuzzle(mp.GetKPIUnitCapacity( uperiods ) );
|
this.KPIUnitCapacityNotMetSubPuzzle( mp.GetKPIUnitCapacityNotMet( uperiods ) );
|
this.KPIStockingPointCapacitySubPuzzle( mp.GetKPIStockingPointCapacity( spips ) );
|
this.KPIFulfillmentSubPuzzle( mp.GetKPIFulfillmentSubPuzzle( scope ) );
|
}
|
if ( eis.BlendingWeight() > 0 )
|
{
|
this.KPIBlending( mp.GetKPIBlending( runcontext.SmallestFeasibilityTolerance() ) );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|