/** Find an initial solution */ public void initialization() { // ---------------------------------------- // Setup the initialization setInit( (TRSPConstructiveHeuristic) getParams() .newInstance( RUN_INIT_HEUR, getInstance(), getParams(), getTourCtrHandler(), getParams().newInitCostDelegate())); // ---------------------------------------- mInitTimer.reset(); mInitTimer.start(); if (getParams().get(TRSPGlobalParameters.ALNS_PARALLEL)) { // TODO parallelize this int size = Math.min( getParams().get(TRSPGlobalParameters.ALNS_PALNS_POOL_SIZE), getParams().get(TRSPGlobalParameters.THREAD_COUNT)); mInitPool = new ArrayList<TRSPSolution>(size); while (mInitPool.size() < size) { getInit().call(); mInitPool.add(getInit().getSolution()); } Collections.sort(mInitPool, new SolutionComparator<>(OptimizationSense.MINIMIZATION)); mInitSol = mInitPool.get(mInitPool.size() - 1).clone(); } else { getInit().call(); setInitSol(getInit().getSolution()); } mInitTimer.stop(); getInitSol().getCostDelegate().unsetUnservedPenalty(); getInitSol().getCostDelegate().evaluateSolution(getInitSol(), true, true); }