Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsGoalsForDriverChangeover ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  Description: 'Init constraints goals for account depends on time, applicable to unit period time' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Mathematical variable names 
 | 
    driverchangeover_varname := typeof( MPDriverChangeoverVariable ); 
 | 
    unitperiodnroftoolchange_varname := typeof( MPUnitPeriodNrOfToolChangeVariable ); 
 | 
    // Constraint names 
 | 
    tconstname := typeof( MPDriverChangeoverConstraint ); 
 | 
    // scaling factor calculations 
 | 
    scalefactor_driver_tconst := this.ScaleConstraintTerm( driverchangeover_varname, tconstname ); 
 | 
    scalefactor_unitperiodtime_tconst := this.ScaleConstraintTerm( unitperiodnroftoolchange_varname, tconstname ); 
 | 
     
 | 
    scalefactor_rhs_tconst := this.ScaleConstraintRHS( tconstname, 1.0 ); 
 | 
     
 | 
    driver := select( this, MacroPlan.AccountCostDriver, driver, driver.Name() = Translations::MP_AccountAssignmentCostDriverChangeover() ); 
 | 
    traverse( scope.GetAccountsInOptimizerRunConst(), Elements, account, account.HasChangeOverAssignment() ) 
 | 
    { 
 | 
     
 | 
      // tconst constraint UoM: Monetary 
 | 
      tconst := program.DriverChangeoverConstraints().New( account, driver ); 
 | 
      tconst.Sense( '=' ); 
 | 
      tconst.RHSValue( 0.0 * scalefactor_rhs_tconst ); 
 | 
      // Term UoM: Monetary 
 | 
      tconst.NewTerm( 1.0 * scalefactor_driver_tconst, program.DriverChangeoverVariables().Get( account, driver ) ); 
 | 
     
 | 
      traverse( account, AccountAssignment, aa, aa.AccountCostDriver() = driver and aa.AccountCost( relsize ) > 0  ) 
 | 
      { 
 | 
        traverse( aa, astype( UnitAccount ).UnitAccountInPeriodForChangeover.UnitPeriod, up, 
 | 
                  scope.Contains( up.UnitPeriodInOptimizerRun() ) ) 
 | 
        { 
 | 
          varUnitPeriodNrOfToolChange := program.UnitPeriodNrOfToolChangeVariables().Find( up ); 
 | 
           
 | 
          if( not isnull( varUnitPeriodNrOfToolChange ) ) 
 | 
          { 
 | 
            cost := up.astype( UnitPeriodTime ).GetBaseCostPerChangeover( aa.astype( UnitAccount ) ); 
 | 
            // Term:    -cost * UnitPeriodNrOfToolChange variable 
 | 
            // UoM: [Monetary/Unit] *    [-]    *    [Unit] 
 | 
            tconst.NewTerm( -cost * scalefactor_unitperiodtime_tconst, varUnitPeriodNrOfToolChange ); 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |