| 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' } | 
| } |