public Design Crossover(List <Design> seeds)
        {
            Design crossed = (Design)this.DesignClone();

            // if no parents are selected, crossover does not occur
            if (seeds == null || seeds.Count == 0)
            {
                return(crossed); // return original design if no seed, then mutate it
            }

            // otherwise, return a crossover of all the parent seeds
            else
            {
                for (int i = 0; i < this.DesignVariables.Count; i++)
                {
                    DesignVar        var      = crossed.DesignVariables[i];
                    List <DesignVar> seedvars = new List <DesignVar>();

                    foreach (Design d in seeds)
                    {
                        Design cd = (Design)d;
                        seedvars.Add(cd.DesignVariables[i]);
                    }

                    var.Crossover(seedvars);
                }

                return(crossed);
            }
        }
        public static Design Crossover(Design d, List<Design> seeds)
        {
            Design crossed = d.DesignClone();

            // if no parents are selected, crossover does not occur
            if (seeds == null || seeds.Count == 0)
            {
                return crossed;
            }

            // otherwise, return a crossover of all the parent seeds
            else
            {
                for (int i = 0; i < d.DesignVariables.Count; i++)
                {
                    DesignVar var = crossed.DesignVariables[i];
                    List<DesignVar> seedvars = new List<DesignVar>();

                    foreach (Design s in seeds)
                    {
                        seedvars.Add(s.DesignVariables[i]);
                    }

                    var.Crossover(seedvars);
                }

                return crossed;
            }
        }