Quintiq file version 2.0
|
#parent: #root
|
Method CreateSubOptimizerLevels (
|
const RunContextForCapacityPlanning runcontext,
|
LibOpt_Task task
|
)
|
{
|
TextBody:
|
[*
|
// this method creates the levels for cplex re-execution control flow
|
|
this.SubOptimizerLevel( relflush );
|
|
maxlevel := this.GetMaxLevel( runcontext ); // need to create level 0, 1, ..., maxlevel, and potentially maxlevel+1 in case we add a ptqty minimization at the end
|
|
// meta optimizer can skip levels by means of fixing bounds
|
|
currentlevelnumber := 0; // level 0 we always do. this is where we start creating levels
|
while( currentlevelnumber <= maxlevel )
|
{
|
this.SubOptimizerLevel( relnew, LevelNumber := currentlevelnumber, IsExtraPTQTYLevelMetaOptimizer := false );
|
currentlevelnumber := currentlevelnumber + 1; // advance to next level
|
skippedaheadlevel := false;
|
if ( runcontext.IsMetaIteration() and not this.IsFullPlanMetaPriorFocus() ) // look for skipping ahead, if possible
|
{
|
oldcurrentlevelnumber := currentlevelnumber;
|
searchstart := currentlevelnumber;
|
currentlevelnumber := this.GetNextOptimizationLevel( runcontext, task.Scope().IsGeneratedByPreProductionSelector(), searchstart );
|
skippedaheadlevel := oldcurrentlevelnumber < currentlevelnumber;
|
if ( skippedaheadlevel )
|
{
|
debuginfo( 'Meta optimizer skipping ahead to ', currentlevelnumber, ' instead of ', oldcurrentlevelnumber, 'pre production sel. scope =', task.Scope().IsGeneratedByPreProductionSelector() );
|
}
|
}
|
}
|
|
if ( runcontext.IsMetaIteration() )
|
{
|
if ( this.GetDoExecutePTQtyLevel( task.Scope().IsGeneratedByPreProductionSelector() ) )
|
{
|
this.SubOptimizerLevel( relnew, LevelNumber := maxlevel + 1, IsExtraPTQTYLevelMetaOptimizer := true );
|
}
|
}
|
|
if ( this.DoLevelCollapse( runcontext ) )
|
{
|
this.FirstSubOptimizerLevel().Delete(); // remove level 0
|
}
|
|
this.CurrentSubOptimizerLevel( relset, this.FirstSubOptimizerLevel() );
|
debuginfo( 'Created nr of level = ', this.SubOptimizerLevel( relsize ), 'first = ', this.FirstSubOptimizerLevel().LevelNumber() );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|