| Quintiq file version 2.0 | 
| #parent: #root | 
| MethodOverride GetAnchorPISPIPs ( | 
|   LibOpt_Scope scope, | 
|   RunContextForCapacityPlanning runcontext, | 
|   RunContextMeta runcontextmeta | 
| ) as owning ProductInStockingPointInPeriodPlannings | 
| { | 
|   TextBody: | 
|   [* | 
|     pispips := construct( ProductInStockingPointInPeriodPlanningLeafs );  | 
|     anchor := null( UnitPeriod );  | 
|     runcontext := this.GetRunContextCapacityPlanning();  | 
|     runcontextmeta := this.GetRunContextMeta();  | 
|     candidates := LinkProbabilityUnitPeriod::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.GetRandomUnitPeriod( scope ); // failsafe | 
|       comment := 'R ';  | 
|     } | 
|      | 
|     if ( not isnull( anchor ) )  | 
|     { | 
|       this.SetDescriptionAnchor( anchor,comment );  | 
|       debuginfo( this.DescriptionSelectedAnchor() );  | 
|       anchor.MetaOptimizerTried( anchor.MetaOptimizerTried() + 1 );  | 
|     } | 
|      | 
|     traverse( anchor, PeriodTask_MP.NewSupply.ProductInStockingPointInPeriodPlanningLeaf, nspispip )  | 
|     { | 
|       pispips.Add(  nspispip );  | 
|     } | 
|      | 
|     traverse( anchor, PeriodTask_MP.DependentDemand.ProductInStockingPointInPeriodPlanningLeaf, ddpispip )  | 
|     { | 
|       pispips.Add(  ddpispip );  | 
|     } | 
|      | 
|     traverse( anchor,  | 
|               Unit.OperationForOptimization.ProcessOutput.ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning.astype(  ProductInStockingPointInPeriodPlanningLeaf ), | 
|               p,  | 
|               p.Period_MP() = anchor.Period_MP() )  | 
|     { | 
|       pispips.Add(  p );  | 
|     } | 
|      | 
|     traverse( anchor,  | 
|               Unit.OperationForOptimization.ProcessInput.ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning.astype(  ProductInStockingPointInPeriodPlanningLeaf ), | 
|               p,  | 
|               p.Period_MP() = anchor.Period_MP() )  | 
|     { | 
|       pispips.Add(  p );  | 
|     }  | 
|      | 
|     if ( pispips.Size() = 0 and anchor.EISShiftPatternMinDuration() > 0 )  | 
|     { | 
|       ptasks := selectset(  anchor.GetAllParentsOfUnitDimensionNonConst(), Elements.PeriodTask_MP, pt, true, true );  | 
|        | 
|       traverse( ptasks, Elements.NewSupply.ProductInStockingPointInPeriodPlanningLeaf, nspispip )  | 
|       { | 
|         pispips.Add(  nspispip );  | 
|       } | 
|      | 
|       traverse( ptasks, Elements.DependentDemand.ProductInStockingPointInPeriodPlanningLeaf, ddpispip )  | 
|       { | 
|         pispips.Add(  ddpispip );  | 
|       } | 
|     } | 
|      | 
|     return &pispips; | 
|   *] | 
| } |