Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SetCPLEXParametersHierarchicalGoal ( 
 | 
  MathematicalProgram program, 
 | 
  const StrategyLevelMacroPlan runlevel, 
 | 
  MPGoal goal 
 | 
) const 
 | 
{ 
 | 
  Description: 'Set the parameters (time limit, gap, etc) of the optimizer, according to setting per iteration' 
 | 
  TextBody: 
 | 
  [* 
 | 
    goal.ParameterSet().Flush();  
 | 
    runcontext := this.GetRunContextConst();  
 | 
     
 | 
    // set runlevel abs / rel gap  
 | 
    if ( not runcontext.IsMetaIteration() )  
 | 
    { 
 | 
      if( runlevel.UseAbsoluteGap() ) 
 | 
      { 
 | 
        goal.ParameterSet().Set( 2008, runlevel.AbsoluteGap() );      // absolute gap tolerance 
 | 
        goal.ParameterSet().Set( 2009, 0.0 ); // explicitly must set rel gap to 0, otherwise solver can still terminate early based on that  
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        goal.ParameterSet().Set( 2009, runlevel.RelativeGap() );      // relative gap tolerance 
 | 
        goal.ParameterSet().Set( 2008, 0.0 ); // explicitly must set abs gap to 0, otherwise solver can still terminate early based on that  
 | 
      } 
 | 
    } 
 | 
       
 | 
    // set specific setting from solver settings object 
 | 
    this.ActivateSolverSettingsHierarchical( program, runlevel, goal, runcontext );        // activate the solver settings for the next level 
 | 
     
 | 
    // set time limit   
 | 
    timelimit := [Real]runlevel.TimeLimit(); 
 | 
    timelimitcplexparamnumber := 1039;  
 | 
    if ( runcontext.IsMetaIteration() )  
 | 
    { 
 | 
      rcm := this.GetRunContextMeta(); 
 | 
      timelimit := 2 * rcm.OptionMaxTimePerIterationSeconds(); // set time out to be twice the target time used for tuning 
 | 
    } 
 | 
    goal.ParameterSet().Set( timelimitcplexparamnumber, timelimit ); 
 | 
     
 | 
    // set AbsTol, RelTol 
 | 
    if ( runlevel.UseHierarchicalSolverRelTolerance() )  
 | 
    { 
 | 
      goal.RelTolerance( runlevel.HierarchicalCPLEXRelTolerance() ); // note solver documentation. Not used for LP.  
 | 
    } 
 | 
    if ( runlevel.UseHierarchicalSolverAbsTolerance() )  
 | 
    { 
 | 
      goal.AbsTolerance( runlevel.HierarchicalCPLEXAbsTolerance() );  
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |