예제 #1
0
        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);
        }
예제 #2
0
        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);
        }