Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method InitConstraintsGoalsForDriverOneTime ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const RunContextForCapacityPlanning runcontext, 
 | 
  const LibOpt_Scope scope 
 | 
) const 
 | 
{ 
 | 
  Description: 'Init constraints goals for account depends on one time cost' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // One time cost accounts 
 | 
     
 | 
     
 | 
    ptisused_varname := typeof( MPPTIsUsedVariable ); 
 | 
    driveronetime_varname := typeof( MPDriverOneTimeVariable ); 
 | 
    driveronetime_constname := typeof( MPDriverOneTimeConstraint ); 
 | 
     
 | 
    scalefactor_driver_dconst := this.ScaleConstraintTerm( driveronetime_varname, driveronetime_constname ); 
 | 
    scalefactor_ptisused_dconst := this.ScaleConstraintTerm( ptisused_varname, driveronetime_constname ); 
 | 
     
 | 
    scalefactor_rhs_dconst := this.ScaleConstraintRHS( driveronetime_constname, 1.0 ); 
 | 
     
 | 
    driver := select( this, MacroPlan.AccountCostDriver, driver, driver.Name() = Translations::MP_AccountAssignmentCostDriverOneTime() ); 
 | 
    traverse( scope.GetAccountsInOptimizerRunConst(), Elements, account, account.HasOneTimeAssignment() ) 
 | 
    { 
 | 
      // dcconst constraint UoM: Monetary 
 | 
      dcconst := program.DriverOneTimeConstraints().New( account, driver ); 
 | 
      dcconst.Sense( '=' ); 
 | 
      dcconst.RHSValue( 0.0 * scalefactor_rhs_dconst ); 
 | 
      // Term UoM: Monetary 
 | 
      dcconst.NewTerm( 1.0 * scalefactor_driver_dconst, program.DriverOneTimeVariables().Get( account, driver ) ); 
 | 
     
 | 
      if ( runcontext.UseOneTimeCost() )  
 | 
      { 
 | 
        traverse( account, AccountAssignment, aa, aa.AccountCostDriver() = driver and aa.AccountCost( relsize ) > 0  ) 
 | 
        { 
 | 
          // Operation (only include those that are part of this optimizer run and related to a unit period that is part of this optimizer run) 
 | 
          traverse( aa, astype( UnitAccount ).UnitAccountInPeriodForOneTimeCost.UnitPeriod, up, 
 | 
                    scope.Contains(  up.UnitPeriodInOptimizerRun() ) ) 
 | 
          { 
 | 
            traverse( up, Unit.OperationForOptimizationInScope, operation, operation.HasOneTimeCost() )  
 | 
            { 
 | 
              cost := operation.GetBaseOneTimeCost( aa, up ); 
 | 
              isusedvar := program.PTIsUsedVariables().Find( operation, up.Period_MP() ); 
 | 
              // If the isused variable does not exist, then this combination of period and operation is not considered by the optimizer 
 | 
              if( not isnull( isusedvar ) ) 
 | 
              { 
 | 
                // Term:      -cost      * PTIsUSed variable 
 | 
                // UoM:  [Monetary/Unit] *    [-]    *    [Unit] 
 | 
                dcconst.NewTerm( -cost * scalefactor_ptisused_dconst, isusedvar ); 
 | 
              } 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |