Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method RexecuteForHierarchicalGoals ( 
 | 
  CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program, 
 | 
  const RunContextForCapacityPlanning runcontext, 
 | 
  LibOpt_Scope scope 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    this.SetNextSubOptimizerLevelAsCurrent();  
 | 
    debuginfo( 'Re-execute for hierarchical cplex' );  
 | 
    this.Debug_FreezeDecisionVariables( program, runcontext.FirstPeriod_MP(), runcontext.LastPeriod_MP(), scope, true );  
 | 
    this.ReExecute( program );  
 | 
     
 | 
    maxlevel := minvalue(  this.FocusLevel(), this.GetMaxLevelNumberForHierarchicalGoals( runcontext, scope ) );  
 | 
    for ( i := 0; i < maxlevel; i++ )  
 | 
    { 
 | 
      nameofgoal := CapacityPlanningSuboptimizer::HierarchicalGoalLevelName( i );  
 | 
      try 
 | 
      { 
 | 
        goalvalue := program.GoalValue( nameofgoal ); 
 | 
        goal := program.Goal( nameofgoal );   
 | 
        traverse( goal.Terms(), Elements, t )  
 | 
        { 
 | 
          t.Coefficient( 0.0 );  
 | 
        } 
 | 
        level := this.GetRunLevel( i );  
 | 
        levelvar := program.GoalForLevelVariables().Get( level );  
 | 
        levelvar.LowerBound( goalvalue );  
 | 
        debuginfo(  'Set bound of ', goalvalue, ' for level ', i );  
 | 
      } 
 | 
      onerror 
 | 
      { 
 | 
        debuginfo(  'error encountered' );  
 | 
        // we skip levels 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |