Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method DebugAssignGoalValue ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  AlgorithmRunLevel level, 
 | 
  LibOpt_Scope scope 
 | 
) 
 | 
{ 
 | 
  Description: 'Assign goal value to attribute' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Storing of goal value to instances 
 | 
     
 | 
    level.Update( level.Start(), DateTime::ActualTime(), true, program.AbsoluteGap(), program.RelativeGap(), program.GoalValue(), program.Optimal() ); 
 | 
    level.UpdateStatistics( program, this.IsAutoScalingEnabled() ); 
 | 
     
 | 
    // Non-financial kpis 
 | 
    result := level.OptimizerNonFinancialKPIResult(); 
 | 
     
 | 
    if( not isnull( result ) ) 
 | 
    { 
 | 
      vartotalblending := program.TotalBlendingVariables().Get(); 
 | 
      result.GoalValueBlending( -this.GetOptimalValue( vartotalblending ) ); 
 | 
                 
 | 
      vartotalcampaign := program.TotalCampaignVariables().Get(); 
 | 
      result.GoalValueCampaign( -this.GetOptimalValue( vartotalcampaign ) ); 
 | 
       
 | 
      vartotalfulfillment := program.TotalFulfillmentVariables().Get(); 
 | 
      result.GoalValueFulfillment( this.GetOptimalValue( vartotalfulfillment ) ); 
 | 
     
 | 
      varinventorymixbalancing := program.TotalInventoryMixBalancingVariables().Get(); 
 | 
      result.GoalValueInventoryMixBalancing( -this.GetOptimalValue( varinventorymixbalancing ) ); 
 | 
       
 | 
      vartotallotsize := program.TotalLotSizeVariables().Get(); 
 | 
      result.GoalValueLotSize( -this.GetOptimalValue( vartotallotsize ) ); 
 | 
     
 | 
      vartotalmaxinvlevel := program.TotalMaximumInventoryLevelVariables().Get(); 
 | 
      result.GoalValueMaximumInventoryLevel( -this.GetOptimalValue( vartotalmaxinvlevel ) ); 
 | 
     
 | 
      vartotalmininvlevel := program.TotalMinimumInventoryLevelVariables().Get(); 
 | 
      result.GoalValueMinimumInventoryLevel( -this.GetOptimalValue( vartotalmininvlevel ) ); 
 | 
     
 | 
      vartotalmaxsupply := program.TotalMaximumSupplyVariables().Get(); 
 | 
      result.GoalValueMaximumSupply( -this.GetOptimalValue( vartotalmaxsupply ) ); 
 | 
     
 | 
      var := program.TotalMinimumSupplyVariables().Get(); 
 | 
      result.GoalValueMinimumSupply( -this.GetOptimalValue( var ) ); 
 | 
     
 | 
      vartotalminunitcapacity := program.TotalMinimumUnitCapacityVariables().Get(); 
 | 
      result.GoalValueMinimumUnitCapacity( -this.GetOptimalValue( vartotalminunitcapacity ) ); 
 | 
     
 | 
      vartotalminunitsecondarycapacity := program.TotalMinimumUnitSecondaryCapacityVariables().Get(); 
 | 
      result.GoalValueMinimumUnitSecondaryCapacity( -this.GetOptimalValue( vartotalminunitsecondarycapacity ) ); 
 | 
     
 | 
      vartotalpostponementpenalty := program.TotalPostponementPenaltyVariables().Get(); 
 | 
      result.GoalValuePostponementPenalty( -this.GetOptimalValue( vartotalpostponementpenalty ) ); 
 | 
       
 | 
      vartotalprocessmaxqty := program.TotalProcessMaximumQuantityVariables().Get(); 
 | 
      result.GoalValueProcessMaximumQuantity( -this.GetOptimalValue( vartotalprocessmaxqty ) ); 
 | 
       
 | 
      vartotalsalesdemandpriority := program.TotalSalesDemandPriorityVariables().Get(); 
 | 
      result.GoalValueSalesDemandPriority( this.GetOptimalValue( vartotalsalesdemandpriority ) ); 
 | 
     
 | 
      vartotalfulfillmenttarget := program.TotalFulfillmentTargetVariables().Get(); 
 | 
      result.GoalValueFulfillmentTarget( this.GetOptimalValue( vartotalfulfillmenttarget ) ); 
 | 
     
 | 
      vartotalservicelevel := program.TotalServiceLevelVariables().Get(); 
 | 
      result.GoalValueServiceLevel( this.GetOptimalValue( vartotalservicelevel ) ); 
 | 
       
 | 
      vartotalstockingcapacity := program.TotalStockingPointCapacityVariables().Get(); 
 | 
      result.GoalValueStockingPointCapacity( -this.GetOptimalValue( vartotalstockingcapacity ) ); 
 | 
     
 | 
      vartotalslack := program.TotalSlackVariables().Get(); 
 | 
      result.GoalValueSlack( -this.GetOptimalValue( vartotalslack ) ); 
 | 
       
 | 
      vartotalsupplytarget := program.TotalSupplyTargetVariables().Get(); 
 | 
      result.GoalValueSupplyTarget( -this.GetOptimalValue( vartotalsupplytarget ) ); 
 | 
     
 | 
      vartotaltargetinvlevel := program.TotalTargetInvLevelVariables().Get(); 
 | 
      result.GoalValueTargetInventoryLevel( -this.GetOptimalValue( vartotaltargetinvlevel ) ); 
 | 
     
 | 
      vartotalunitcapacity := program.TotalUnitCapacityVariables().Get(); 
 | 
      result.GoalValueUnitCapacity( -this.GetOptimalValue( vartotalunitcapacity ) ); 
 | 
       
 | 
      vartotalunitsecondarycapacity := program.TotalUnitSecondaryCapacityVariables().Get(); 
 | 
      result.GoalValueUnitSecondaryCapacity( - this.GetOptimalValue( vartotalunitsecondarycapacity ) ); 
 | 
       
 | 
      vartotalcapacitysmoothingslack := program.TotalCapacitySmoothingSlackVariables().Get();  
 | 
      result.GoalValueCapacitySmoothingSlack( -this.GetOptimalValue( vartotalcapacitysmoothingslack ) );  
 | 
                      
 | 
      vartotalexpired := program.TotalExpiredQtyVariables().Get();                  
 | 
      result.GoalValueTotalExpiredQty( -this.GetOptimalValue( vartotalexpired ) ); 
 | 
       
 | 
      vartotalco2emission := program.TotalCO2EmissionVariables().Get(); 
 | 
      result.GoalValueCO2Emission( -this.GetOptimalValue( vartotalco2emission ) ); 
 | 
       
 | 
      vartotalshiftpatternchangespenalty := program.TotalShiftPatternChangesPenaltyVariables().Get(); 
 | 
      result.GoalValueShiftPatternChangesPenalty( -this.GetOptimalValue( vartotalshiftpatternchangespenalty ) ); 
 | 
    } 
 | 
     
 | 
    // Account kpis 
 | 
    traverse( scope.GetAccountsInOptimizerRun(), Elements, account ) 
 | 
    { 
 | 
      accountresult := select( level, OptimizerAccountKPIResult, r, r.AccountName() = account.Name() ); 
 | 
     
 | 
      if( not isnull( accountresult ) ) 
 | 
      { 
 | 
        traverse( account, AccountAssignment.AccountCostDriver, driver ) 
 | 
        { 
 | 
          if( driver.Name() = Translations::MP_AccountAssignmentCostDriverFixed() )                 // fixed 
 | 
          { 
 | 
            // we don't need fixed cost in the optimizer.  
 | 
          } 
 | 
          else if ( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventorySupply() )  
 | 
          { 
 | 
            // cost driver inventory supply not applicable in optimizer                             // inventory supply 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverStaffing() )         // staffing 
 | 
          { 
 | 
            var := program.DriverStaffingVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueStaffing( -value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventoryValue() )   // inventory value 
 | 
          { 
 | 
            var := program.DriverInventoryValueVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueInventoryValue( value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverInventoryHolding() ) // inventory holding 
 | 
          { 
 | 
            var := program.DriverInventoryHoldingVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueInventoryHolding( -value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverNrOfUnits() )        // nr of units 
 | 
          { 
 | 
            var := program.DriverNrOfUnitsVariables().Get( account, driver );  
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueNrOfUnits( -value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverSales() )            // sales 
 | 
          { 
 | 
            var := program.DriverSalesVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueSales( value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverTime() )             // time 
 | 
          { 
 | 
            var := program.DriverTimeVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueTime( -value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverVolume() )           // volume 
 | 
          { 
 | 
            var := program.DriverVolumeVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueVolume( -value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverLot() )              // Lot 
 | 
          { 
 | 
            var := program.DriverLotVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueLot( -value ); 
 | 
          } 
 | 
          else if( driver.Name() = Translations::MP_AccountAssignmentCostDriverChangeover() )        // Changeover 
 | 
          { 
 | 
            var := program.DriverChangeoverVariables().Get( account, driver ); 
 | 
            value := this.GetOptimalValue( var ); 
 | 
            accountresult.GoalValueChangeOver( -value ); 
 | 
          } 
 | 
          else if ( driver.Name() = Translations::MP_AccountAssignmentCostDriverOneTime() )         // One-time  
 | 
          { 
 | 
            var := program.DriverOneTimeVariables().Get( account, driver );  
 | 
            value := this.GetOptimalValue( var );  
 | 
            accountresult.GoalValueOneTimeCost( -value );  
 | 
          } 
 | 
          else 
 | 
          { 
 | 
            info( '>>> Missing goal value assignment for account ', account.Name(), ' driver name:', driver.Name() );   
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |