@SuppressWarnings("unchecked") private <T> List<T> executeBulkIteration(BulkIterationBase<?> iteration) throws Exception { Operator<?> inputOp = iteration.getInput(); if (inputOp == null) { throw new InvalidProgramException("The iteration " + iteration.getName() + " has no input (initial partial solution)."); if (iteration.getNextPartialSolution() == null) { throw new InvalidProgramException("The iteration " + iteration.getName() + " has no next partial solution defined (is not closed)."); iteration.getNextPartialSolution().accept(dynCollector); if (iteration.getTerminationCriterion() != null) { iteration.getTerminationCriterion().accept(dynCollector); for (AggregatorWithName<?> a : iteration.getAggregators().getAllRegisteredAggregators()) { aggregators.put(a.getName(), a.getAggregator()); String convCriterionAggName = iteration.getAggregators().getConvergenceCriterionAggregatorName(); ConvergenceCriterion<Value> convCriterion = (ConvergenceCriterion<Value>) iteration.getAggregators().getConvergenceCriterion(); final int maxIterations = iteration.getMaximumNumberOfIterations(); this.intermediateResults.put(iteration.getPartialSolution(), currentResult); currentResult = (List<T>) execute(iteration.getNextPartialSolution(), superstep); if (iteration.getTerminationCriterion() != null) { execute(iteration.getTerminationCriterion(), superstep);
/** * @param name */ public BulkIterationBase(UnaryOperatorInformation<T, T> operatorInfo, String name) { super(new UserCodeClassWrapper<AbstractRichFunction>(AbstractRichFunction.class), operatorInfo, name); inputPlaceHolder = new PartialSolutionPlaceHolder<T>(this, this.getOperatorInfo()); }
private <T> BulkIterationBase<T> translateBulkIteration(BulkIterationResultSet<?> untypedIterationEnd) { @SuppressWarnings("unchecked") BulkIterationResultSet<T> iterationEnd = (BulkIterationResultSet<T>) untypedIterationEnd; IterativeDataSet<T> iterationHead = iterationEnd.getIterationHead(); BulkIterationBase<T> iterationOperator = new BulkIterationBase<>(new UnaryOperatorInformation<>(iterationEnd.getType(), iterationEnd.getType()), "Bulk Iteration"); if (iterationHead.getParallelism() > 0) { iterationOperator.setParallelism(iterationHead.getParallelism()); } translated.put(iterationHead, iterationOperator.getPartialSolution()); Operator<T> translatedBody = translate(iterationEnd.getNextPartialSolution()); iterationOperator.setNextPartialSolution(translatedBody); iterationOperator.setMaximumNumberOfIterations(iterationHead.getMaxIterations()); iterationOperator.setInput(translate(iterationHead.getInput())); iterationOperator.getAggregators().addAll(iterationHead.getAggregators()); if (iterationEnd.getTerminationCriterion() != null) { iterationOperator.setTerminationCriterion(translate(iterationEnd.getTerminationCriterion())); } return iterationOperator; }
iter.getNextPartialSolution().accept(recursiveCreator); partialSolution = (BulkPartialSolutionNode) recursiveCreator.con2node.get(iter.getPartialSolution()); OptimizerNode rootOfStepFunction = recursiveCreator.con2node.get(iter.getNextPartialSolution()); if (partialSolution == null) { throw new CompilerException("Error: The step functions result does not depend on the partial solution."); if (iter.getTerminationCriterion() != null) { terminationCriterion = recursiveCreator.con2node.get(iter.getTerminationCriterion()); iter.getTerminationCriterion().accept(recursiveCreator); terminationCriterion = recursiveCreator.con2node.get(iter.getTerminationCriterion());
final int maxNumIterations = bulkNode.getIterationNode().getIterationContract().getMaximumNumberOfIterations(); if (maxNumIterations < 1) { throw new CompilerException("Cannot create bulk iteration with unspecified maximum number of iterations."); AggregatorRegistry aggs = bulkNode.getIterationNode().getIterationContract().getAggregators(); Collection<AggregatorWithName<?>> allAggregators = aggs.getAllRegisteredAggregators();
/** * @param criterion */ public <X> void setTerminationCriterion(Operator<X> criterion) { TypeInformation<X> type = criterion.getOperatorInfo().getOutputType(); FlatMapOperatorBase<X, X, TerminationCriterionMapper<X>> mapper = new FlatMapOperatorBase<X, X, TerminationCriterionMapper<X>>( new TerminationCriterionMapper<X>(), new UnaryOperatorInformation<X, X>(type, type), "Termination Criterion Aggregation Wrapper"); mapper.setInput(criterion); this.terminationCriterion = mapper; this.getAggregators().registerAggregationConvergenceCriterion(TERMINATION_CRITERION_AGGREGATOR_NAME, new TerminationCriterionAggregator(), new TerminationCriterionAggregationConvergence()); }
/** * Creates a new node for the bulk iteration. * * @param iteration The bulk iteration the node represents. */ public BulkIterationNode(BulkIterationBase<?> iteration) { super(iteration); if (iteration.getMaximumNumberOfIterations() <= 0) { throw new CompilerException("BulkIteration must have a maximum number of iterations specified."); } int numIters = iteration.getMaximumNumberOfIterations(); this.costWeight = (numIters > 0 && numIters < OptimizerNode.MAX_DYNAMIC_PATH_COST_WEIGHT) ? numIters : OptimizerNode.MAX_DYNAMIC_PATH_COST_WEIGHT; }
@Override public boolean preVisit(Operator<?> visitable) { if(visitable instanceof GenericDataSourceBase) { sources.add((GenericDataSourceBase<?, ?>) visitable); } else if(visitable instanceof BulkIterationBase) { ((BulkIterationBase<?>) visitable).getNextPartialSolution().accept(this); } return true; }
iter.getNextPartialSolution().accept(recursiveCreator); partialSolution = (BulkPartialSolutionNode) recursiveCreator.con2node.get(iter.getPartialSolution()); OptimizerNode rootOfStepFunction = recursiveCreator.con2node.get(iter.getNextPartialSolution()); if (partialSolution == null) { throw new CompilerException("Error: The step functions result does not depend on the partial solution."); if (iter.getTerminationCriterion() != null) { terminationCriterion = recursiveCreator.con2node.get(iter.getTerminationCriterion()); iter.getTerminationCriterion().accept(recursiveCreator); terminationCriterion = recursiveCreator.con2node.get(iter.getTerminationCriterion());
final int maxNumIterations = bulkNode.getIterationNode().getIterationContract().getMaximumNumberOfIterations(); if (maxNumIterations < 1) { throw new CompilerException("Cannot create bulk iteration with unspecified maximum number of iterations."); AggregatorRegistry aggs = bulkNode.getIterationNode().getIterationContract().getAggregators(); Collection<AggregatorWithName<?>> allAggregators = aggs.getAllRegisteredAggregators();
/** * @param criterion */ public <X> void setTerminationCriterion(Operator<X> criterion) { TypeInformation<X> type = criterion.getOperatorInfo().getOutputType(); FlatMapOperatorBase<X, X, TerminationCriterionMapper<X>> mapper = new FlatMapOperatorBase<X, X, TerminationCriterionMapper<X>>( new TerminationCriterionMapper<X>(), new UnaryOperatorInformation<X, X>(type, type), "Termination Criterion Aggregation Wrapper"); mapper.setInput(criterion); this.terminationCriterion = mapper; this.getAggregators().registerAggregationConvergenceCriterion(TERMINATION_CRITERION_AGGREGATOR_NAME, new TerminationCriterionAggregator(), new TerminationCriterionAggregationConvergence()); }
/** * Creates a new node for the bulk iteration. * * @param iteration The bulk iteration the node represents. */ public BulkIterationNode(BulkIterationBase<?> iteration) { super(iteration); if (iteration.getMaximumNumberOfIterations() <= 0) { throw new CompilerException("BulkIteration must have a maximum number of iterations specified."); } int numIters = iteration.getMaximumNumberOfIterations(); this.costWeight = (numIters > 0 && numIters < OptimizerNode.MAX_DYNAMIC_PATH_COST_WEIGHT) ? numIters : OptimizerNode.MAX_DYNAMIC_PATH_COST_WEIGHT; }
@Override public boolean preVisit(Operator<?> visitable) { if (this.seen.add(visitable)) { // add to the map final String name = visitable.getName(); List<Operator<?>> list = this.map.get(name); if (list == null) { list = new ArrayList<Operator<?>>(2); this.map.put(name, list); } list.add(visitable); // recurse into bulk iterations if (visitable instanceof BulkIterationBase) { ((BulkIterationBase) visitable).getNextPartialSolution().accept(this); } else if (visitable instanceof DeltaIterationBase) { ((DeltaIterationBase) visitable).getSolutionSetDelta().accept(this); ((DeltaIterationBase) visitable).getNextWorkset().accept(this); } return true; } else { return false; } }
@SuppressWarnings("unchecked") private <T> List<T> executeBulkIteration(BulkIterationBase<?> iteration) throws Exception { Operator<?> inputOp = iteration.getInput(); if (inputOp == null) { throw new InvalidProgramException("The iteration " + iteration.getName() + " has no input (initial partial solution)."); if (iteration.getNextPartialSolution() == null) { throw new InvalidProgramException("The iteration " + iteration.getName() + " has no next partial solution defined (is not closed)."); iteration.getNextPartialSolution().accept(dynCollector); if (iteration.getTerminationCriterion() != null) { iteration.getTerminationCriterion().accept(dynCollector); for (AggregatorWithName<?> a : iteration.getAggregators().getAllRegisteredAggregators()) { aggregators.put(a.getName(), a.getAggregator()); String convCriterionAggName = iteration.getAggregators().getConvergenceCriterionAggregatorName(); ConvergenceCriterion<Value> convCriterion = (ConvergenceCriterion<Value>) iteration.getAggregators().getConvergenceCriterion(); final int maxIterations = iteration.getMaximumNumberOfIterations(); this.intermediateResults.put(iteration.getPartialSolution(), currentResult); currentResult = (List<T>) execute(iteration.getNextPartialSolution(), superstep); if (iteration.getTerminationCriterion() != null) { execute(iteration.getTerminationCriterion(), superstep);
private <T> BulkIterationBase<T> translateBulkIteration(BulkIterationResultSet<?> untypedIterationEnd) { @SuppressWarnings("unchecked") BulkIterationResultSet<T> iterationEnd = (BulkIterationResultSet<T>) untypedIterationEnd; IterativeDataSet<T> iterationHead = iterationEnd.getIterationHead(); BulkIterationBase<T> iterationOperator = new BulkIterationBase<>(new UnaryOperatorInformation<>(iterationEnd.getType(), iterationEnd.getType()), "Bulk Iteration"); if (iterationHead.getParallelism() > 0) { iterationOperator.setParallelism(iterationHead.getParallelism()); } translated.put(iterationHead, iterationOperator.getPartialSolution()); Operator<T> translatedBody = translate(iterationEnd.getNextPartialSolution()); iterationOperator.setNextPartialSolution(translatedBody); iterationOperator.setMaximumNumberOfIterations(iterationHead.getMaxIterations()); iterationOperator.setInput(translate(iterationHead.getInput())); iterationOperator.getAggregators().addAll(iterationHead.getAggregators()); if (iterationEnd.getTerminationCriterion() != null) { iterationOperator.setTerminationCriterion(translate(iterationEnd.getTerminationCriterion())); } return iterationOperator; }
iter.getNextPartialSolution().accept(recursiveCreator); partialSolution = (BulkPartialSolutionNode) recursiveCreator.con2node.get(iter.getPartialSolution()); OptimizerNode rootOfStepFunction = recursiveCreator.con2node.get(iter.getNextPartialSolution()); if (partialSolution == null) { throw new CompilerException("Error: The step functions result does not depend on the partial solution."); if (iter.getTerminationCriterion() != null) { terminationCriterion = recursiveCreator.con2node.get(iter.getTerminationCriterion()); iter.getTerminationCriterion().accept(recursiveCreator); terminationCriterion = recursiveCreator.con2node.get(iter.getTerminationCriterion());
final int maxNumIterations = bulkNode.getIterationNode().getIterationContract().getMaximumNumberOfIterations(); if (maxNumIterations < 1) { throw new CompilerException("Cannot create bulk iteration with unspecified maximum number of iterations."); AggregatorRegistry aggs = bulkNode.getIterationNode().getIterationContract().getAggregators(); Collection<AggregatorWithName<?>> allAggregators = aggs.getAllRegisteredAggregators();
iterationNode.setSerializerForIterationChannel(createSerializer(operator.getOperatorInfo().getOutputType()));
/** * @param criterion */ public <X> void setTerminationCriterion(Operator<X> criterion) { TypeInformation<X> type = criterion.getOperatorInfo().getOutputType(); FlatMapOperatorBase<X, X, TerminationCriterionMapper<X>> mapper = new FlatMapOperatorBase<X, X, TerminationCriterionMapper<X>>( new TerminationCriterionMapper<X>(), new UnaryOperatorInformation<X, X>(type, type), "Termination Criterion Aggregation Wrapper"); mapper.setInput(criterion); this.terminationCriterion = mapper; this.getAggregators().registerAggregationConvergenceCriterion(TERMINATION_CRITERION_AGGREGATOR_NAME, new TerminationCriterionAggregator(), new TerminationCriterionAggregationConvergence()); }
/** * Creates a new node for the bulk iteration. * * @param iteration The bulk iteration the node represents. */ public BulkIterationNode(BulkIterationBase<?> iteration) { super(iteration); if (iteration.getMaximumNumberOfIterations() <= 0) { throw new CompilerException("BulkIteration must have a maximum number of iterations specified."); } int numIters = iteration.getMaximumNumberOfIterations(); this.costWeight = (numIters > 0 && numIters < OptimizerNode.MAX_DYNAMIC_PATH_COST_WEIGHT) ? numIters : OptimizerNode.MAX_DYNAMIC_PATH_COST_WEIGHT; }