Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsForUnitPeriodCapacities (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
Boolean enableminconst,
|
Real totalmincapacity,
|
Real totalmaxcapacity,
|
const RunContextForCapacityPlanning runcontext,
|
const LibOpt_Scope scope,
|
const CapacityPlanningSuboptimizer subopt
|
) const
|
{
|
Description: 'The constraint to limit the production of period tasks to be within defined capacity'
|
TextBody:
|
[*
|
// defining minimum capacities for unit, Sum of PT Qty + not met >= UP.MinCapacity
|
// minconstup constraint UoM: Unit
|
minconstup := null( MPConstraint );
|
if( this.Unit().HasCapacityTypeTimeBase() )
|
{
|
minconstup := program.MinUnitCapacityTimeConstraints().New( this );
|
}
|
else
|
{
|
minconstup := program.MinUnitCapacityQtyConstraints().New( this );
|
}
|
|
minconstup.Sense( '>=' );
|
|
// RHS UoM: Unit
|
minconstup.RHSValue( subopt.ScaleConstraintRHS( typeofexpression( minconstup ), totalmincapacity ) );
|
// Term UoM: Unit
|
var := this.GetCapacityNotMetVariable( program );
|
|
minconstup.NewTerm( 1.0 * subopt.ScaleConstraintTerm( typeofexpression( var ), typeofexpression( minconstup ) )
|
, var );
|
minconstup.Enabled( enableminconst )
|
|
// defining maximum capacities for unit, Sum of PT Qty <= UP.AvailableCapacity
|
// maxconstup constraint UoM: Unit
|
maxconstup := null( MPConstraint );
|
if( this.Unit().HasCapacityTypeTimeBase() )
|
{
|
maxconstup := program.MaxUnitCapacityTimeConstraints().New( this );
|
}
|
else
|
{
|
maxconstup := program.MaxUnitCapacityQtyConstraints().New( this );
|
}
|
|
// When using shift optimization, total capacity depends on the shift patterns selected by the optimizer.
|
if( this.IsInScopeForShiftOptimization( scope ) and runcontext.UseShiftOptimization() ){
|
maxconstup.RHSValue( 0 );
|
|
unitperiod := this.astype( UnitPeriodTimeBase );
|
unitperiod.AddTermsForMaximumCapacity( program, subopt, maxconstup, runcontext );
|
}
|
else
|
{
|
// RHS UoM: Unit
|
maxconstup.RHSValue( subopt.ScaleConstraintRHS( typeofexpression( maxconstup ), totalmaxcapacity ) );
|
}
|
|
maxconstup.Sense( '<=' );
|
maxconstup.Enabled( not this.IsPlannedInfinite() );
|
|
this.InitConstraintsForCapacityUsage( program, minconstup, maxconstup, runcontext, scope, subopt );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|