Quintiq file version 2.0
|
#parent: #root
|
MethodOverride GetAnchorPISPIPs (
|
LibOpt_Scope scope,
|
RunContextForCapacityPlanning runcontext,
|
RunContextMeta runcontextmeta
|
) as owning ProductInStockingPointInPeriodPlannings
|
{
|
TextBody:
|
[*
|
anchor := construct( ProductInStockingPointInPeriodPlannings );
|
anchorleafs := construct( ProductInStockingPointInPeriodPlannings );
|
mp := runcontext.FirstPeriod_MP().MacroPlan();
|
|
candidates := this.GetCandidates( scope );
|
|
candidatesvector := selectvalues( candidates, Elements, c, true, this.GetScore( c ) );
|
maxindex := candidatesvector.Size() - 1;
|
i := SelectorMeta::GetRandomIndex( candidatesvector );
|
comment := '';
|
if ( i <= maxindex ) // if we exit within limits of candidates, then know i is the index where for the 1st time cumulative sum >= Real::Random( epsilon, totalEIS)
|
{
|
anchor.Add( candidates.Element( i ) );
|
}
|
else
|
{
|
anchor.Add( this.GetRandomPISPIP( mp, scope ) );
|
comment := 'picked random pispip';
|
}
|
|
traverse( anchor, Elements, anc )
|
{
|
debuginfo( 'anchor=', anc.NameForOptimizer() );
|
}
|
traverse( anchor, Elements, anc )
|
{
|
anchorleafs.Add( anc );
|
|
if ( not anc.istype( ProductInStockingPointInPeriodPlanningLeaf ) )
|
{
|
randomleafs := selectsortedset( anc.GetLeafPISPIPs(), Elements, p, true, Real::Random() );
|
|
traverse( randomleafs, Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), productchild )
|
{
|
anchorleafs.Add( productchild );
|
}
|
}
|
}
|
|
this.SetDescriptionAnchors( anchor, anchorleafs, comment );
|
|
return &anchorleafs;
|
*]
|
}
|