Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsForOperationDependentDemandInputSet (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const RunContextForCapacityPlanning runcontext,
|
const LibOpt_Scope scope
|
) const
|
{
|
Description: 'Initialize constraints for dependent demands which is part of an input group and belongs to an input set.'
|
TextBody:
|
[*
|
maxconstname := typeof( MPOperationInputSetUpperBoundConstraint );
|
minconstname := typeof( MPOperationInputSetLowerBoundConstraint );
|
|
scalefactor_periodtaskqty_maxconst := this.ScaleConstraintTerm( typeof( MPPTQtyVariable ), maxconstname );
|
scalefactor_operationinputsetover_maxconst := this.ScaleConstraintTerm( typeof( MPOperationInputSetOverVariable ), maxconstname );
|
scalefactor_periodtaskqty_minconst := this.ScaleConstraintTerm( typeof( MPPTQtyVariable ), minconstname );
|
scalefactor_operationinputsetunder_minconst := this.ScaleConstraintTerm( typeof( MPOperationInputSetUnderVariable ), minconstname );
|
scalefactor_partialoperationdemandqty_maxconst := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), maxconstname );
|
scalefactor_partialoperationdemandqty_minconst := this.ScaleConstraintTerm( typeof( MPPartialOperationDemandQtyVariable ), minconstname );
|
scalefactor_operationdemandqty_maxconst := this.ScaleConstraintTerm( typeof( MPOperationDemandQtyVariable ), maxconstname );
|
scalefactor_operationdemandqty_minconst := this.ScaleConstraintTerm( typeof( MPOperationDemandQtyVariable ), minconstname );
|
|
scalefactor_rhs_maxconst := this.ScaleConstraintRHS( maxconstname, 1.0 );
|
scalefactor_rhs_minconst := this.ScaleConstraintRHS( minconstname, 1.0 );
|
|
traverse( scope.GetOperationInputSetInOptimizerRunConst(), Elements, set,
|
not exists( set, OperationInput, input,
|
not input.GetIsProductInOptimizerRun( runcontext.IsPostProcessing() ) ) ) // Filter the set if one or more inputs is excluded
|
{
|
|
operation := set.Operation();
|
// If the outputquantity is zero, then the uom is the uom of the unit
|
maxfactor := set.MaxQuantity();
|
minfactor := set.MinQuantity();
|
if( operation.OutputQuantity() > 0.0 )
|
{
|
maxfactor := set.MaxQuantity() / operation.OutputQuantity();
|
minfactor := set.MinQuantity() / operation.OutputQuantity();
|
}
|
|
if ( this.GetPeriodsFromPeriodTaskOperation() )
|
{
|
traverse( operation, PeriodTaskOperationInScope, pto )
|
{
|
period := pto.UnitPeriod().Period_MP();
|
this.InitConstraintsForOperationDependentDemandInputSet_Add( program,
|
runcontext,
|
scope,
|
set,
|
period,
|
pto,
|
scalefactor_periodtaskqty_maxconst,
|
scalefactor_operationinputsetover_maxconst,
|
scalefactor_periodtaskqty_minconst,
|
scalefactor_operationinputsetunder_minconst,
|
scalefactor_partialoperationdemandqty_maxconst,
|
scalefactor_partialoperationdemandqty_minconst,
|
scalefactor_operationdemandqty_maxconst,
|
scalefactor_operationdemandqty_minconst,
|
scalefactor_rhs_maxconst,
|
scalefactor_rhs_minconst,
|
maxfactor,
|
minfactor );
|
}
|
|
}
|
else
|
{
|
periods := this.GetPeriodsForOperation( scope, operation );
|
|
traverse( periods, Elements, period )
|
{
|
this.InitConstraintsForOperationDependentDemandInputSet_Add( program,
|
runcontext,
|
scope,
|
set,
|
period,
|
null( PeriodTaskOperation ),
|
scalefactor_periodtaskqty_maxconst,
|
scalefactor_operationinputsetover_maxconst,
|
scalefactor_periodtaskqty_minconst,
|
scalefactor_operationinputsetunder_minconst,
|
scalefactor_partialoperationdemandqty_maxconst,
|
scalefactor_partialoperationdemandqty_minconst,
|
scalefactor_operationdemandqty_maxconst,
|
scalefactor_operationdemandqty_minconst,
|
scalefactor_rhs_maxconst,
|
scalefactor_rhs_minconst,
|
maxfactor,
|
minfactor );
|
}
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|