Quintiq file version 2.0
|
#parent: #root
|
Method StoreInitialInventoryViolations (
|
RunContextForCapacityPlanning runcontext
|
)
|
{
|
TextBody:
|
[*
|
// we need to store the violations how they are at the start of the run. Especially for the meta optimizer we should use those pre-existing violations and not those of the existing plan because
|
// earlier iterations can reduce violations for inventory specification in days, creating extra constraints on later fulfillment focus level iterations
|
// only guarantee should be not to make the violations worse than what was pre existing
|
startoptscope := runcontext.FirstPeriod_MP().Start();
|
macroplan := this.Optimization().astype( Optimization ).MacroPlan();
|
traverse( macroplan, PlanningPeriod, period, period.Start() < startoptscope )
|
{
|
traverse( period, ProductInStockingPointInPeriod.astype( ProductInStockingPointInPeriodPlanning ), pispip )
|
{
|
pispip.ViolationMinInventoryRunStart( maxvalue( 0.0, pispip.MinInventoryLevel() - pispip.InventoryLevelEnd() ) );
|
pispip.ViolationMaxInventoryRunStart( maxvalue( 0.0, pispip.InventoryLevelEnd() - pispip.MaxInventoryLevel() ) );
|
pispip.ViolationTargetInventoryRunStart( maxvalue( 0.0, pispip.TargetInventoryLevel() - pispip.InventoryLevelEnd() ) );
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|