Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsGoalsForSlacks (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const RunContextForCapacityPlanning runcontext,
|
const LibOpt_Scope scope,
|
const constcontent ProductInStockingPointInPeriodPlannings pispipsinrun
|
) const
|
{
|
Description: 'The constraint to compute the total slacks per category used in the algorithm.'
|
TextBody:
|
[*
|
// The total user supply slack is equal to the sum of all user supply slacks
|
if( runcontext.GetConsiderTotalUserSupply( scope ) )
|
{
|
totalslackuserconstrname := typeof( MPTotalSlackUserSupplyConstraint );
|
|
scalefactor_totalslackusersupply_totalslackuserconstr := this.ScaleConstraintTerm( typeof( MPTotalSlackUserSupplyVariable ), totalslackuserconstrname );
|
scalefactor_usertotalsupplyover_totalslackuserconstr := this.ScaleConstraintTerm( typeof( MPUserTotalSupplyOverVariable ), totalslackuserconstrname );
|
scalefactor_usertotalsupplyunder_totalslackuserconstr := this.ScaleConstraintTerm( typeof( MPUserTotalSupplyUnderVariable ), totalslackuserconstrname );
|
|
// totalslackuserconstr constraint UoM: Default
|
totalslackuserconstr := program.TotalSlackUserSupplyConstraints().New();
|
totalslackuserconstr.Sense( '=' );
|
// RHS UoM: Default
|
totalslackuserconstr.RHSValue( 0.0 );
|
|
// Term UoM: Default
|
totalslackuserconstr.NewTerm( -1.0 * scalefactor_totalslackusersupply_totalslackuserconstr, program.TotalSlackUserSupplyVariables().Get() );
|
|
// Add regular UserTotalSupply slacks
|
pispipstoadd := runcontext.GetPISPISPForUserSupplyConstraint( scope, pispipsinrun ) // only add slack variables for those pispips where we define user supply constraints
|
traverse( pispipstoadd, Elements, pispip )
|
{
|
{
|
uomconversion := pispip.ProductInStockingPoint_MP().DefaultUOMConversionFactor();
|
|
// Term: uomconversion * UserTotalSupply Slack variable
|
// UoM: [PISP to Default] * [PISP]
|
totalslackuserconstr.NewTerm( uomconversion * scalefactor_usertotalsupplyover_totalslackuserconstr, program.UserTotalSupplyOverVariables().Get( pispip ) );
|
totalslackuserconstr.NewTerm( uomconversion * scalefactor_usertotalsupplyunder_totalslackuserconstr, program.UserTotalSupplyUnderVariables().Get( pispip ) );
|
}
|
}
|
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|