private CombinationTasksToFire findBestCombination( CombinationTasksToFire bCombination, HNSet inputSet, int rootTask, CombinationTasksToFire combination, HNSubSet treatedTasks) { int task = -1; HNSet alreadyMarkedPlaces = null; HNSet temp_inputSet = null; HNSubSet noTokensFromTasks = null; HNSubSet subset = null; if ((bCombination.getTasks().size() == 0) || (bCombination.getNumberMissingTokens() > combination.getNumberMissingTokens())) { if (rootTask != ROOT_TASK_ID) { alreadyMarkedPlaces = getAlreadyMarkedPlaces(inputSet, rootTask); noTokensFromTasks = HNSet.getUnionSet(alreadyMarkedPlaces); inputSet.removeAll(alreadyMarkedPlaces); combination.getTasks().add(rootTask); } if (inputSet.size() == 0) { bCombination = combination.copy(); } else { // akam: I stoppe here - 10/07/2005 if (rootTask != ROOT_TASK_ID) { temp_inputSet = new HNSet(); for (int iInputSet = 0; iInputSet < inputSet.size(); iInputSet++) { subset = inputSet.get(iInputSet); subset.removeAll(noTokensFromTasks); subset.removeAll(treatedTasks); if (subset.size() == 0) { combination.setTokens(combination.getNumberMissingTokens() + 1); } else { temp_inputSet.add(subset); } } inputSet = temp_inputSet; } for (int iInputSet = 0; iInputSet < inputSet.size(); iInputSet++) { subset = inputSet.get(iInputSet); while (subset.size() > 0) { task = subset.get(generator.nextInt(subset.size())); bCombination = findBestCombination( bCombination, inputSet.deepCopy(), task, combination.copy(), treatedTasks.deepCopy()); treatedTasks.add(task); subset.remove(task); } } } } return bCombination; }