Quintiq file version 2.0
|
#parent: #root
|
Method AddTermsToInventorySpecificationConstraint (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
MPConstraint constr,
|
const ProductInStockingPointInPeriodPlanning pispip,
|
Real specificationindays,
|
const LibOpt_Scope scope,
|
Real scalefactor_demandfulfillmentinpispip_constr,
|
Real scalefactor_rhs_constr
|
) const
|
{
|
Description: 'Updates the terms/RHS of the input inventory specification constraint'
|
TextBody:
|
[*
|
// If the input pispip is a leaf pispip, we only need to add terms related to this product
|
activepispips := construct( ProductInStockingPointInPeriodPlannings, constcontent );
|
if( pispip.IsLeafPlanning() )
|
{
|
activepispips.Add( pispip )
|
}
|
// If the input pispip is not a leaf pispip, we need to add terms for all of its leaf products
|
else
|
{
|
traverse( pispip.GetLeavesOfProductDimensionConst(), Elements.astype( ProductInStockingPointInPeriodPlanning ), activepispip,
|
not activepispip.ProductInStockingPoint_MP().IsNegativeInventoryAllowed() )
|
{
|
activepispips.Add( activepispip );
|
}
|
}
|
|
delta_term_forRHS := 0.0;
|
traverse( activepispips, Elements, activepispip )
|
{
|
relevantpispips := activepispip.GetNextPlanningPISPIPsForOpt( specificationindays );
|
remainingdays_o := specificationindays;
|
|
|
traverse( relevantpispips, Elements, nextpispip )
|
{
|
ratio := nextpispip.GetPISPIPRatioForSpecificationInDays( remainingdays_o );
|
|
// If the next pispip is part of this optimizer run, add a term to the constraint, otherwise update the RHS
|
if( scope.Contains( nextpispip.PISPIPInOptimizerRun() ) )
|
{
|
// Term: ratio * DemandFulfillmentInPISPIP variable
|
// UoM: [-] * [PISP]
|
constr.NewTerm( -ratio * scalefactor_demandfulfillmentinpispip_constr, program.DemandFulfillmentInPISPIPVariables().Get( nextpispip ) );
|
}
|
else
|
{
|
delta_term_forRHS := delta_term_forRHS + (ratio * nextpispip.FulfilledDemandQuantity());
|
}
|
}
|
}
|
newrhs := this.GetConstraintRHS( constr, scalefactor_rhs_constr ) + delta_term_forRHS;
|
constr.RHSValue( newrhs * scalefactor_rhs_constr );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|