protected function _generateNestedPointSequences($node)
 {
     $pointSequence = $node->getContent()->getPoints();
     $generator = new Generator(['tuple_length' => Point::getPointCount($this->getPoints()), 'generating_elements' => Helper::getGeneratorDataFromPoints($this->getPoints()), 'current_path' => $node->getContent(), 'weight_capacity' => $this->getWeightCapacity(), 'load_area' => $this->getLoadArea()]);
     // $generator->validate();
     $points = Helper::getGeneratorDataFromPoints($pointSequence);
     $result = Helper::getPointSequencesFromGeneratorData($generator->generateNextObjects($points));
     if ($result) {
         // hack: if all PDP points except of depot are present, add depot
         $nodeHasAllPointsExceptOfDepot = Helper::pointSequenceIncludesAllPickupsAndDeliveries(reset($result), $this->getPoints());
         if ($nodeHasAllPointsExceptOfDepot) {
             foreach ($result as &$resultPointSequence) {
                 $resultPointSequence = array_merge($resultPointSequence, [$this->getDepot()]);
             }
         }
     }
     return $result;
 }
 protected function _getSuccessiveElements($tuple)
 {
     $result = [];
     if ($allCandidates = parent::_getSuccessiveElements($tuple)) {
         $childrenCount = max(1, round($this->getPrecise() * count($allCandidates) / 100));
         $result = $this->_getNElementsNearestTo(last($tuple), $allCandidates, $childrenCount);
     }
     return $result;
 }