Quintiq file version 2.0
|
#parent: #root
|
Method GetIsImprovement () as Boolean
|
{
|
Description: 'Checks whether this iteration was an improvement compared to the best iteration'
|
TextBody:
|
[*
|
// Martijn Nov-4-2016 (created)
|
|
isimprovement := true;
|
previousbestiteration := select( this, DEPRECATED_InventoryOptimization.Iteration, iteration, iteration.IsBestIteration() );
|
|
if( not isnull( previousbestiteration ) )
|
{
|
isbetter := false;
|
isworse := false;
|
bestiterationlevels := selectsortedset( previousbestiteration, IterationLevel, bestiterationlevel,
|
true,
|
bestiterationlevel.Level() );
|
|
// Traverse sequentially over the iteration levels and check whether the level of the current iteration is better or worse than that of the best iteration so far
|
// If it is better, accept this iteration, if it is worse, reject this iteration
|
traverse( bestiterationlevels, Elements, bestiterationlevel )
|
{
|
// If we have not yet determined whether the iteration is better or worse
|
if( not isbetter and not isworse )
|
{
|
algorithmlevel := select( this.DEPRECATED_InventoryOptimization().MacroPlan().GetLastAlgorithmRun(), AlgorithmRunLevel, arl, arl.Level() = bestiterationlevel.Level() );
|
relativegoalslack := guard( algorithmlevel.RelativeGoalSlack(), 0.0 );
|
prevbestexpectedkpi := bestiterationlevel.InventoryOptimizationExpectedTotalKPI();
|
newiterationlevel := select( this, IterationLevel, itlevel, itlevel.Level() = bestiterationlevel.Level() );
|
newexpectedkpi := guard( newiterationlevel.InventoryOptimizationExpectedTotalKPI(), prevbestexpectedkpi - 1.0 );
|
// If the new expected total KPI value minus the relative goal slack is better
|
// than the previous best expected total KPI than the iteration was an improvement
|
factor := ifexpr( newexpectedkpi > 0, 1.0, -1.0 );
|
if( newexpectedkpi * ( 1 - factor * relativegoalslack ) > prevbestexpectedkpi )
|
{
|
isbetter := true;
|
}
|
// If the previous best expected total KPI value is better
|
// than the new expected total KPI than the iteration was an improvement
|
else if( prevbestexpectedkpi > newexpectedkpi * ( 1 + factor * relativegoalslack ) )
|
{
|
isworse := true;
|
}
|
}
|
}
|
isimprovement := isbetter;
|
}
|
|
return isimprovement;
|
*]
|
}
|