Quintiq file version 2.0
|
#parent: #root
|
Method UpdateGoalScaling (
|
StrategyMacroPlan strategy,
|
StrategyLevelMacroPlan slm
|
)
|
{
|
TextBody:
|
[*
|
// provide slm in order to use level specific scaling factor ( used for meta optimizer )
|
|
// Set goal scaling factors to be equal to the maximum value of the relevant variable scaling types
|
this.CreateScaleFactors( slm );
|
|
algorithmscaling := this.AlgorithmScaling();
|
|
minscalingfactor := algorithmscaling.MinScalingFactor();
|
maxscalingfactor := algorithmscaling.MaxScalingFactor();
|
|
traverse( strategy, StrategyLevelMacroPlan, strategylevel )
|
{
|
newgoalscalingfactor := minscalingfactor;
|
if ( strategylevel.Level() = 0 )
|
{
|
// set mass scaling for balance slack level
|
newgoalscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalSlackVariable ) );
|
}
|
else
|
{
|
traverse( strategy, KPIWeightMacroPlan, kpiweight, kpiweight.Level() = strategylevel.Level() )
|
{
|
varscalingfactor := 0.0;
|
weightedvarscalingfactor := minscalingfactor;
|
|
if( not kpiweight.KPIIsAccount() )
|
{
|
name := kpiweight.KPIName();
|
|
if( name = Translations::MP_GlobalParameters_KPIBlendingName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalBlendingVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPICampaignName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalCampaignVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIFulfillmentName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalFulfillmentVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPILotSizeName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalLotSizeVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIInventoryMixBalancing() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalInventoryMixBalancingVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIMaximumInventoryLevelName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalMaximumInventoryLevelVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIMinimumInventoryLevelName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalMinimumInventoryLevelVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIMaximumSupplyName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalMaximumSupplyVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIMinimumSupplyName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalMinimumSupplyVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIMinimumUnitCapacityName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalMinimumUnitCapacityVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIPostponementPenaltyName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalPostponementPenaltyVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIProcessMaximumQuantity() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalProcessMaximumQuantityVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIProcessMinimumQuantity() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalProcessMinimumQuantityVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPISalesDemandPriorityName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalSalesDemandPriorityVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIFulfillmentTargetName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalFulfillmentTargetVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIServiceLevelName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalServiceLevelVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIStockingPointCapacityName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalStockingPointCapacityVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPISupplyTargetName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalSupplyTargetVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPISafetyStock() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalTargetInvLevelVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIUnitCapacityName() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalUnitCapacityVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPICapacitySmoothing() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPCapacitySmoothingSlackVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPICO2Emission() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalCO2EmissionVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
else if( name = Translations::MP_GlobalParameters_KPIShiftPatternChangesPenalty() )
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPTotalShiftPatternChangesPenaltyVariable ) );
|
weightedvarscalingfactor := varscalingfactor * kpiweight.Weight();
|
}
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else
|
{
|
account := select( this, MacroPlan.Account_MP, a, guard( a.Name() = kpiweight.KPIName(), false ) );
|
|
if( not isnull( account ) )
|
{
|
traverse( account, AccountAssignment.AccountCostDriver, driver )
|
{
|
|
if( driver.Name() = Translations::MP_AccountAssignmentCostDriverFixed() ) // fixed
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverFixedVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverStaffing() ) // staffing
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverStaffingVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor )
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventoryValue() ) // inventory value
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverInventoryValueVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventoryHolding() ) // inventory holding
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverInventory_HoldingVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverNrOfUnits() ) // nr of units
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverNrOfUnitsVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverSales() ) // sales
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverSalesVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverTime() ) // time
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverTimeVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverVolume() ) // volume
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverVolumeVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverLot() ) // Lot
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverLotVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverChangeover() ) // Changeover
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverChangeoverVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else if ( driver.Name() = Translations::MP_AccountAssignmentCostDriverOneTime() ) // One time
|
{
|
varscalingfactor := CapacityPlanningSuboptimizer::GetVariableScaleFactor( typeof( MPDriverOneTimeVariable ) );
|
weightedvarscalingfactor := varscalingfactor * account.Weight();
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, weightedvarscalingfactor );
|
}
|
else
|
{
|
info( '>>> Driver variable does not exist and excluded from goal scaling update calculations which is for account ', account.Name(), ' driver name:', driver.Name() );
|
}
|
}
|
}
|
}
|
}
|
}
|
|
newgoalscalingfactor := maxvalue( newgoalscalingfactor, minscalingfactor );
|
newgoalscalingfactor := minvalue( newgoalscalingfactor, maxscalingfactor );
|
|
oldvalue := strategylevel.GoalScaling();
|
strategylevel.GoalScaling( newgoalscalingfactor );
|
debuginfo( 'Updated goal scaling for level ', strategylevel.Level(), ' to ', strategylevel.GoalScaling(), 'from ', oldvalue );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|