| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride GetAnchorPISPIPs ( | 
|   LibOpt_Scope scope, | 
|   RunContextForCapacityPlanning runcontext, | 
|   RunContextMeta runcontextmeta | 
| ) as owning ProductInStockingPointInPeriodPlannings | 
| { | 
|   TextBody: | 
|   [* | 
|     pispips := construct( ProductInStockingPointInPeriodPlanningLeafs );  | 
|     runcontext := this.GetRunContextCapacityPlanning();  | 
|     runcontextmeta := this.GetRunContextMeta();  | 
|     mp := runcontext.FirstPeriod_MP().MacroPlan();  | 
|      | 
|     anchor := null( StockingPointInPeriod );  | 
|      | 
|     candidates := LinkProbabilityStockingPointInPeriod::GetCandidates( scope );  | 
|     candidatesvector := selectvalues( candidates, Elements, c, true, c.EstimatedImprovementScore() );  | 
|     maxindex := candidatesvector.Size() - 1;  | 
|     i := SelectorMeta::GetRandomIndex( candidatesvector );  | 
|     comment := '';  | 
|     if ( i <= maxindex )  | 
|     { | 
|       anchor := candidates.Element(  i );  | 
|     }  | 
|     else | 
|     { | 
|       anchor := this.GetRandomSPIP( mp, scope ); // failsafe | 
|       comment := 'R ';  | 
|     } | 
|      | 
|     pispipleafs := selectset(  anchor, LeafPlanningPISPIPs, p, true, p.InventoryLevelEnd() > 0 );  | 
|     pispipleafsovermax := selectset(  pispipleafs, Elements, p, true, not p.IsValidPlannedMaxInventoryLevel() );  | 
|     pispip := null(  ProductInStockingPointInPeriodPlanningLeaf );  | 
|     if ( Real::Random(0.0, 1.0 ) > 0.5 or pispipleafsovermax.Size() = 0 )  | 
|     { | 
|       pispip := guard( pispipleafs.Element( Number::Random( 0, pispipleafs.Size() - 1 ) ), null( ProductInStockingPointInPeriodPlanningLeaf ) );  | 
|     } | 
|     else | 
|     { | 
|       pispip := guard( pispipleafsovermax.Element( Number::Random( 0, pispipleafsovermax.Size() - 1 ) ), null( ProductInStockingPointInPeriodPlanningLeaf ) );  | 
|     } | 
|      | 
|     if ( isnull( pispip ) )  | 
|     { | 
|       pispip := select(  anchor, LeafPlanningPISPIPs, p, true, true );  | 
|       | 
|     } | 
|     pispips.Add( pispip );  | 
|      | 
|     if ( not isnull( anchor ) )  | 
|     { | 
|       debuginfo( 'anchor spip = ', anchor.StockingPointID(), anchor.Start() );  | 
|       comment := comment + guard( pispip.ProductInStockingPoint_MP().StockingPointID() + pispip.ProductInStockingPoint_MP().ProductID() + [String] pispip.Start(), '-' )  | 
|                  + 'eis=' + [String]anchor.EstimatedImprovementScore() + 'tried=' + [String]anchor.MetaOptimizerTried();  | 
|       this.SetDescriptionAnchor( anchor,comment );  | 
|       anchor.MetaOptimizerTried( anchor.MetaOptimizerTried() + 1 );  | 
|     } | 
|      | 
|      | 
|     return &pispips; | 
|   *] | 
| } |