private HashMap<Integer, Set<Integer>> createVesselDepartureChromosome( HashMap<Integer, Set<Integer>> installationDepartureChromosome) { HashMap<Integer, Set<Integer>> individualVesselDeparturePatterns = new HashMap<Integer, Set<Integer>>(); Set<Integer> daysWithDeparture = getDaysWithDeparture( installationDepartureChromosome); // get all days that installations require a departure for (Vessel vessel : problemData .getVessels()) { // for each vessel, choose a random vessel pattern that fits with the // installationDepartureChromosome Set<Integer> randomVesselDeparturePattern = pickRandomVesselDeparturePattern(daysWithDeparture, individualVesselDeparturePatterns); if (randomVesselDeparturePattern == null) { // workaround until a smarter heuristic is created numberOfPatternRestarts++; return createVesselDepartureChromosome(installationDepartureChromosome); } individualVesselDeparturePatterns.put(vessel.getNumber(), randomVesselDeparturePattern); } if (isDepotConstraintViolated(individualVesselDeparturePatterns)) { numberOfDepotRestarts++; return createVesselDepartureChromosome(installationDepartureChromosome); } return individualVesselDeparturePatterns; }