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;
|
*]
|
}
|