private static SetOfPlants GenerateNewPlants(SetOfPlants availablePlants) { var discoveredPlants = new SetOfPlants(); for (int nbPlants = 2; nbPlants <= Parameters.MaxNbPlantsInMerge; nbPlants++) { foreach (var subSet in availablePlants.Combinations(nbPlants)) { var newPlants = PlantFactory.Instance.MergePlants(subSet); discoveredPlants.UnionWith(newPlants); } } return(discoveredPlants); }
private static SetOfPlants GenerateNewPlants(SetOfPlants previousGenerationPlants, SetOfPlants currentGenerationPlants, int nbOfPreviousGenPlants, int nbOfCurrentGenPlants) { ConcurrentBag <Plant> bag = new ConcurrentBag <Plant>(); //foreach (var subSetCurrentGen in currentGenerationPlants.Combinations(nbOfCurrentGenPlants)) Parallel.ForEach(currentGenerationPlants.Combinations(nbOfCurrentGenPlants), subSetCurrentGen => { //foreach (var subSetAvailable in previousGenerationPlants.Combinations(nbOfPreviousGenPlants)) Parallel.ForEach(previousGenerationPlants.Combinations(nbOfPreviousGenPlants), subSetAvailable => { var subSet = subSetAvailable.Union(subSetCurrentGen); var newPlants = PlantFactory.Instance.MergePlants(subSet); foreach (var plant in newPlants) { bag.Add(plant); } }); }); SetOfPlants discoveredPlants = new SetOfPlants(); discoveredPlants.UnionWith(bag); return(discoveredPlants); }