Ejemplo n.º 1
0
        public static void ReinstateGenome(ChihuahuaComponent comp, List <decimal> Ngenome)
        {
            GH_Document docu = comp.OnPingDocument();

            //Change value of sliders
            IList <IGH_Param> sliders = comp.Params.Input[0].Sources;

            List <decimal> genome = new List <decimal>();

            if (sliders.Count != Ngenome.Count)
            {
                throw new System.ArgumentException("Numbers of genes not equal to number of sliders", "Genome");
            }

            for (int i = 0; i < sliders.Count; i++)
            {
                Grasshopper.Kernel.Special.GH_NumberSlider slider = sliders[i] as Grasshopper.Kernel.Special.GH_NumberSlider;
                if (slider != null)
                {
                    decimal N_gene_value = Ngenome[i];
                    decimal gene_value   = N_gene_value.Remap(0, 1, slider.Slider.Minimum, slider.Slider.Maximum);
                    slider.SetSliderValue(gene_value);
                    genome.Add(gene_value);
                }
            }


            // Get a new solution

            docu.NewSolution(false);
        }
Ejemplo n.º 2
0
        public static Individual CreateIndividualFromNGenome(ChihuahuaComponent comp, List <decimal> Ngenome)
        {
            GH_Document docu = comp.OnPingDocument();

            //Change value of sliders
            IList <IGH_Param> sliders = comp.Params.Input[0].Sources;

            List <decimal> genome = new List <decimal>();

            if (sliders.Count != Ngenome.Count)
            {
                throw new System.ArgumentException("Numbers of genes not equal to number of sliders", "Genome");
            }

            for (int i = 0; i < sliders.Count; i++)
            {
                Grasshopper.Kernel.Special.GH_NumberSlider slider = sliders[i] as Grasshopper.Kernel.Special.GH_NumberSlider;
                if (slider != null)
                {
                    decimal N_gene_value = Ngenome[i];
                    decimal gene_value   = N_gene_value.Remap(0, 1, slider.Slider.Minimum, slider.Slider.Maximum);
                    slider.SetSliderValue(gene_value);
                    genome.Add(gene_value);
                }
            }


            // Get a new solution

            docu.NewSolution(false);

            //Read new fitness value

            decimal fitness = 0;

            IGH_Param param = comp.Params.Input[1].Sources[0];
            GH_Structure <GH_Number> outcome = comp.Params.Input[1].Sources[0].VolatileData as GH_Structure <GH_Number>;

            if (outcome == null)
            {
                throw new System.ArgumentException("Fitness input is not a number", "Fitness");
            }
            if (outcome != null)
            {
                fitness = (decimal)outcome.Branches[0][0].Value;
            }

            Individual ind = new Individual(fitness, genome, Ngenome);

            return(ind);
        }
Ejemplo n.º 3
0
        public static Individual CreateRandomIndividual(ChihuahuaComponent comp)
        {
            GH_Document docu = comp.OnPingDocument();

            //Change value of sliders
            List <decimal>    genome  = new List <decimal>();
            List <decimal>    Ngenome = new List <decimal>();
            IList <IGH_Param> sliders = comp.Params.Input[0].Sources;

            foreach (IGH_Param param in sliders)
            {
                Grasshopper.Kernel.Special.GH_NumberSlider slider = param as Grasshopper.Kernel.Special.GH_NumberSlider;
                if (slider != null)
                {
                    decimal N_gene_value = (decimal)random.NextDouble();
                    decimal gene_value   = N_gene_value.Remap(0, 1, slider.Slider.Minimum, slider.Slider.Maximum);
                    slider.SetSliderValue(gene_value);
                    Ngenome.Add(N_gene_value);
                    genome.Add(gene_value);
                }

                else
                {
                    Rhino.RhinoApp.WriteLine("At least one of the input parameters is not a number slider" + Environment.NewLine);
                    throw new System.ArgumentException("At least one of the input parameters is not a number slider", "Genome");
                }
            }

            // Get a new solution

            docu.NewSolution(false);

            //Read new fitness value

            decimal fitness = 0;

            if (comp.Params.Input[1].SourceCount != 1)
            {
                Rhino.RhinoApp.Write("Fitness input must be a unique value" + Environment.NewLine);
                throw new System.ArgumentException("Fitness input must be a unique value", "Fitness");
            }

            else
            {
                IGH_Param param = comp.Params.Input[1].Sources[0];
                GH_Structure <GH_Number> outcome = comp.Params.Input[1].Sources[0].VolatileData as GH_Structure <GH_Number>;

                if (outcome == null)
                {
                    Rhino.RhinoApp.WriteLine("Fitness input is not a number" + Environment.NewLine);
                    throw new System.ArgumentException("Fitness input is not a number", "Fitness");
                }
                if (outcome != null)
                {
                    fitness = (decimal)outcome.Branches[0][0].Value;
                }
            }

            Individual ind = new Individual(fitness, genome, Ngenome);

            return(ind);
        }