Quintiq file version 2.0
|
#parent: #root
|
Method InitVariablesForKPITotalValue (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const RunContextForCapacityPlanning runcontext,
|
const LibOpt_Scope scope
|
) const
|
{
|
Description: 'Initialize all KPI variables that used as goal'
|
TextBody:
|
[*
|
// Non financial kpis
|
// TotalBlending variable UoM: Unit
|
program.TotalBlendingVariables().New();
|
// TotalCampaign variable UoM: Unit
|
|
totalcampvar := program.TotalCampaignVariables().New();
|
if ( not runcontext.UseCampaignSequenceOptimizer() )
|
{
|
totalcampvar.LowerBound( Real::MinReal() ); // due to transition output maximization
|
// TotalCampaignTransitionOutput variable UoM: Unit
|
program.TotalCampaignTransitionOutputVariables().New();
|
}
|
// TotalDifferenceInDemandDays variable UoM: Days
|
program.TotalInventoryMixBalancingVariables().New();
|
// TotalFulfillment variable UoM: Default
|
program.TotalFulfillmentVariables().New();
|
// TotalLotSize variable UoM: Unit
|
program.TotalLotSizeVariables().New();
|
// TotalMaximumInventoryLevel variable UoM: PISP
|
program.TotalMaximumInventoryLevelVariables().New();
|
// TotalMinimumInventoryLevel variable UoM: PISP
|
program.TotalMinimumInventoryLevelVariables().New();
|
// TotalMaximumSupply variable UoM: Unit
|
program.TotalMaximumSupplyVariables().New();
|
// TotalMinimumSupply variable UoM: Unit
|
program.TotalMinimumSupplyVariables().New();
|
// TotalMinimumUnitCapacity variable UoM: Unit
|
program.TotalMinimumUnitCapacityVariables().New();
|
// TotalMinimumUnitSecondaryCapacity variable UoM: TransportCapacity
|
program.TotalMinimumUnitSecondaryCapacityVariables().New();
|
// TotalPostPonementPenalty variable UoM: Monetary
|
program.TotalPostponementPenaltyVariables().New();
|
// TotalProcessMaximumQuantity variable UoM: Unit
|
program.TotalProcessMaximumQuantityVariables().New();
|
// TotalSalesDemandPriority variable UoM: Default. Priority can take a negative value, in which case the total SDPriority could also become negative
|
var := program.TotalSalesDemandPriorityVariables().New();
|
var.LowerBound( Real::MinReal() );
|
// TotalFulfillmentTarget variable UoM: Default
|
program.TotalFulfillmentTargetVariables().New();
|
// TotalServiceLevel variable UoM: Default
|
program.TotalServiceLevelVariables().New();
|
// TotalSlack variable UoM: Default
|
program.TotalSlackVariables().New();
|
// TotalSlackUserSupply variable UoM: PISP
|
program.TotalSlackUserSupplyVariables().New();
|
// TotalStockingPointCapacity variable UoM: SP
|
program.TotalStockingPointCapacityVariables().New();
|
// TotalSupplyTarget variable UoM: Unit
|
program.TotalSupplyTargetVariables().New();
|
// TotalTargetInventoryLevel variable UoM: PISP
|
program.TotalTargetInvLevelVariables().New();
|
// TotalUnitCapacity variable UoM: Unit
|
program.TotalUnitCapacityVariables().New();
|
// TotalUnitSecondary variable UoM: TransportCapacity
|
program.TotalUnitSecondaryCapacityVariables().New();
|
// TotalCapacitySmoothing variable
|
program.TotalCapacitySmoothingSlackVariables().New();
|
// TotalExpiredQty variable
|
program.TotalExpiredQtyVariables().New();
|
// TotalCO2Emission variable UoM: CO2
|
program.TotalCO2EmissionVariables().New();
|
// TotalShiftPatternChangesPenalty variable UoM: Default
|
program.TotalShiftPatternChangesPenaltyVariables().New();
|
// Account kpis
|
|
accounts := scope.GetAccountsInOptimizerRunConst();
|
traverse( accounts, Elements, account )
|
{
|
traverse( account, AccountAssignment.AccountCostDriver, driver )
|
{
|
// Account KPI variables UoM: Monetary
|
if( driver.Name() = Translations::MP_AccountAssignmentCostDriverFixed() ) // fixed
|
{
|
// we don't need fixed cost in the optimizer.
|
}
|
else if ( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventorySupply() )
|
{
|
// cost driver inventory supply not applicable in optimizer // inventory supply
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverStaffing() ) // staffing
|
{
|
program.DriverStaffingVariables().New( account, driver );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventoryValue() ) // inventory value
|
{
|
varval := program.DriverInventoryValueVariables().New( account, driver );
|
varval.UpperBound( 0.0 ); // currently unused
|
varval.LowerBound( 0.0 );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventoryHolding() ) // inventory holding
|
{
|
program.DriverInventoryHoldingVariables().New( account, driver );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverNrOfUnits() ) // nr of units
|
{
|
program.DriverNrOfUnitsVariables().New( account, driver ); // currently unused
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverSales() ) // sales
|
{
|
program.DriverSalesVariables().New( account, driver );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverTime() ) // time
|
{
|
program.DriverTimeVariables().New( account, driver );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverVolume() ) // volume
|
{
|
program.DriverVolumeVariables().New( account, driver );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverLot() ) // Lot
|
{
|
program.DriverLotVariables().New( account, driver );
|
}
|
else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverChangeover() ) // Changeover
|
{
|
program.DriverChangeoverVariables().New( account, driver );
|
}
|
else if ( driver.Name() = Translations::MP_AccountAssignmentCostDriverOneTime() ) // One-time cost
|
{
|
program.DriverOneTimeVariables().New( account, driver );
|
}
|
else
|
{
|
info( '>>> Can not create driver variable for account ', account.Name(), ' and driver name:', driver.Name() );
|
}
|
}
|
}
|
|
if ( runcontext.IsMetaIteration() )
|
{
|
program.TotalStockingPointCapacityMetaVariables().New();
|
}
|
|
// Create goal variables for each level
|
this.InitVariablesForLevelGoal( program, runcontext );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|