Quintiq file version 2.0
|
#parent: #root
|
Method InitConstraintsGoalsForDriverStaffing (
|
CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program,
|
const RunContextForCapacityPlanning runcontext,
|
const LibOpt_Scope scope
|
) const
|
{
|
Description: 'Init constraints goals for account depends on staffing'
|
TextBody:
|
[*
|
if( runcontext.UseShiftOptimization() )
|
{
|
constname := typeof( MPDriverStaffingConstraint );
|
|
scalefactor_spisused_spisused := this.ScaleConstraintTerm( typeof( MPShiftPatternIsUsedVariable ), constname );
|
scalefactor_staffing_spisused := this.ScaleConstraintTerm( typeof( MPDriverStaffingVariable ), constname );
|
|
driver := select( this, MacroPlan.AccountCostDriver, driver, driver.Name() = Translations::MP_AccountAssignmentCostDriverStaffing() );
|
traverse( scope.GetAccountsInOptimizerRunConst(), Elements, account, account.HasStaffingAssignment() )
|
{
|
// Staffing constraint UoM : Monetary
|
staffingconstr := program.DriverStaffingConstraints().New( account, driver );
|
staffingconstr.Sense( "=" );
|
staffingconstr.RHSValue( 0.0 );
|
|
staffingconstr.NewTerm( 1.0 * scalefactor_staffing_spisused, program.DriverStaffingVariables().Get( account, driver ) );
|
traverse( account, AccountAssignment, aa, aa.AccountCostDriver() = driver and aa.AccountCost( relsize ) > 0 )
|
{
|
traverse( aa, astype( UnitAccount ).Unit.PlanningUnitPeriod.astype( UnitPeriodTimeBase ), up, up.IsInScopeForShiftOptimization( scope ) )
|
{
|
traverse( this.MacroPlan(), ShiftPattern, sp )
|
{
|
cost := up.GetStaffingBaseCostForShiftPattern( aa, null( AccountCost ), sp );
|
spisusedvar := program.ShiftPatternIsUsedVariables().Find( sp, up );
|
|
if( not isnull( spisusedvar ) )
|
{
|
staffingconstr.NewTerm( -cost * scalefactor_spisused_spisused, spisusedvar );
|
}
|
}
|
}
|
}
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|