Ejemplo n.º 1
0
        private void doMutate(Properties individual)
        {
            PropertyDescriptorCollection pdc = meta.Parameters;

            int count      = pdc.Count(x => x.Range != null && x.Range != "");
            int crossPoint = 1;

            if (count == 1)
            {
                crossPoint = 0;
            }
            else
            {
                crossPoint = new Random().Next(0, count);
            }

            int crossIndex = 0;

            for (int i = 0; i < pdc.Count; i++)
            {
                if (pdc[i].Range == null || pdc[i].Range == "")
                {
                    continue;
                }

                if (crossIndex == crossPoint)
                {
                    crossIndex = i;
                    break;
                }
                crossIndex += 1;
            }


            double value = individual.Get <double>(pdc[crossIndex].Name);
            double min, max;

            pdc[crossIndex].GetRange <double>(out min, out max);
            if (min == max)
            {
                return;
            }
            double r = new Random().NextDouble() * (max - min) + min;

            while (value == r)
            {
                r = new Random().NextDouble() * (max - min) + min;
            }
            if (pdc[crossIndex].Type == typeof(int))
            {
                individual[pdc[crossIndex].Name] = (int)r;
            }
            else
            {
                individual[pdc[crossIndex].Name] = r;
            }
        }
Ejemplo n.º 2
0
        private void doCross(Properties individual1, Properties individual2)
        {
            PropertyDescriptorCollection pdc = meta.Parameters;

            int count      = pdc.Count(x => x.Range != null && x.Range != "");
            int crossPoint = 1;

            if (count == 1)
            {
                crossPoint = 0;
            }
            else
            {
                crossPoint = new Random().Next(0, count);
            }

            int crossIndex = 0;

            for (int i = 0; i < pdc.Count; i++)
            {
                if (pdc[i].Range == null || pdc[i].Range == "")
                {
                    continue;
                }

                if (crossIndex == crossPoint)
                {
                    crossIndex = i;
                    break;
                }
                crossIndex += 1;
            }

            for (int i = crossIndex; i < pdc.Count; i++)
            {
                if (pdc[i].Range == null || pdc[i].Range == "")
                {
                    continue;
                }
                String name = pdc[i].Name;
                Object temp = individual1[name];
                individual1[name] = individual2[name];
                individual2[name] = temp;
            }
        }