Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsGoalsForShiftPatterns (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const RunContextForCapacityPlanning runcontext,
|
const LibOpt_Scope scope
|
) const
|
{
|
Description: 'Init constraints goals for shift patterns'
|
TextBody:
|
[*
|
if( runcontext.UseShiftOptimization() )
|
{
|
constname := typeof( MPTotalShiftPatternChangesConstraint );
|
|
scalefactor_nrshiftchanges_const := this.ScaleConstraintTerm( typeof( MPNrShiftPatternChangesVariable ), constname );
|
|
totalshiftchangesvariablesvalue := 0.0;
|
|
spchangespenaltyconstr := program.TotalShiftPatternChangesPenaltyConstraints().New();
|
spchangespenaltyconstr.NewTerm( -1.0, program.TotalShiftPatternChangesPenaltyVariables().Get() );
|
|
traverse( scope.GetUnitInOptimizerRunConst(), Elements, unit, unit.GetUseShiftOptimization() )
|
{
|
spchangespenaltyconstr.NewTerm( 1.0 * scalefactor_nrshiftchanges_const, program.NrShiftPatternChangesVariables().Get( unit ) );
|
|
// Number of shift pattern changes for the unit periods that are either in scope or directly follow a unit period in scope.
|
coeff := counter( unit.GetUnitForShiftOptimization(), Elements.UnitPeriod.astype( UnitPeriodTime ), up,
|
up.IsInScopeForShiftOptimization( scope ) or guard( up.PreviousPlanningUnitPeriod().IsInScopeForShiftOptimization( scope ), false ),
|
guard( up.ShiftPattern() <> up.PreviousPlanningUnitPeriod().astype( UnitPeriodTime ).ShiftPattern(), false ) );
|
totalshiftchangesvariablesvalue := totalshiftchangesvariablesvalue + coeff * scalefactor_nrshiftchanges_const;
|
}
|
|
// workaround because cannot write to attribute
|
this.StoreValueInProgram( program, 'collect_values_model_MPTotalShiftPatternChangesPenaltyVariables', totalshiftchangesvariablesvalue );
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|