public ScheduleObject MinSchedule(ScheduleObject obj)
 {
     Console.WriteLine("Максимальный время особи №1 - {0} / " +
                       "Максимальный время особи №2 - {1}", this.Weight().weight, obj.Weight().weight);
     if (this.Weight().weight <= obj.Weight().weight)
     {
         return(this);
     }
     return(obj);
 }
Beispiel #2
0
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();

            foreach (var item in lIndividual)
            {
                ScheduleObject sch = new ScheduleObject(item, sizeRange, countPC);
                sb.Append(item.ToString() + "\n" + sch.Weight().weight.ToString() + "\n");
            }
            return(sb.ToString());
        }
 public ScheduleObject MinSchedule(ScheduleObject obj)
 {
     using (var sw = File.AppendText(@"D:\Example.txt"))
         sw.WriteLine("Максимальный время особи №1 - {0} / " +
                      "Максимальный время особи №2 - {1}", this.Weight().weight, obj.Weight().weight);
     if (this.Weight().weight <= obj.Weight().weight)
     {
         return(this);
     }
     return(obj);
 }
Beispiel #4
0
        private void CalculateCountIndividual()
        {
            foreach (var item in lGeneration[1].Getlindividual())
            {
                var weight = new ScheduleObject(item, sizeRange, countPC).Weight().weight;

                if (weight == minTime)
                {
                    countSearchIndividual++;
                }
                if (weight < minTime)
                {
                    countSearchIndividual = 1;
                    minTime = weight;
                }
            }
        }
Beispiel #5
0
        private void CalculateCountIndividual()
        {
            bool flag = false;

            foreach (var item in lGeneration[1].Getlindividual())
            {
                var weight = new ScheduleObject(item, sizeRange, countPC).Weight().weight;

                if (weight == minTime && !flag)
                {
                    countSearchIndividual++;
                    flag = true;
                }
                if (weight < minTime)
                {
                    countSearchIndividual = 1;
                    minTime = weight;
                    return;
                }
            }
        }
        public void FillingGeneration(Generation generation)
        {
            var lGenIndividual = generation.Getlindividual();

            for (int iter = lIndividual.Count; iter < countIndividual; iter++)
            {
                Int32 randPos = rnd.Next(0, countIndividual);
                while (randPos == iter)
                {
                    randPos = rnd.Next(0, countIndividual);
                }

                Console.WriteLine("Берём {0} и {1} особи\n", iter, randPos);

                var resultCrossbreeding = cS.Crossbreeding(lGenIndividual[iter], lGenIndividual[randPos]);
                if (resultCrossbreeding.flag)
                {
                    ScheduleObject schOne = new ScheduleObject(lGenIndividual[iter], sizeRange, countPC);

                    ScheduleObject schTwo = new ScheduleObject(resultCrossbreeding.itemOne, sizeRange, countPC);
                    Console.WriteLine("Первая особь после кроссинговера:\n" + resultCrossbreeding.itemOne.ToString());
                    Console.WriteLine("Расписание на её основе:\n" + schTwo.ToString());
                    if (resultCrossbreeding.itemOne.GeneMutation())
                    {
                        Console.WriteLine("Мутировавшая первая особь:\n" + resultCrossbreeding.itemOne.ToString());
                        Console.WriteLine("Расписание на её основе:\n" + schTwo.ToString());
                    }
                    else
                    {
                        Console.WriteLine("Первый ребёнок не мутировал.\n");
                    }

                    ScheduleObject schThree = new ScheduleObject(resultCrossbreeding.itemTwo, sizeRange, countPC);
                    Console.WriteLine("Вторая особь после кроссинговера:\n" + resultCrossbreeding.itemTwo.ToString());
                    Console.WriteLine("Расписание на её основе:\n" + schThree.ToString());
                    if (resultCrossbreeding.itemTwo.GeneMutation())
                    {
                        Console.WriteLine("Мутировавшая вторая особь:\n" + resultCrossbreeding.itemTwo.ToString());
                        Console.WriteLine("Расписание на её основе:\n" + schThree.ToString());
                    }
                    else
                    {
                        Console.WriteLine("Второй ребёнок не мутировал.\n");
                    }

                    var resEqual = schOne.MinSchedule(schTwo).MinSchedule(schThree);
                    lIndividual.Add(resEqual.GetIndividual());
                    Console.WriteLine("В новое поколение добавлена следующая особь: ");
                    Console.WriteLine(resEqual.GetIndividual().ToString());
                }
                else
                {
                    Console.WriteLine("Родители не скрестились.");
                    var buffInv = lGenIndividual[iter].CloneIndividualFull();
                    Console.WriteLine("Пытаемся мутировать родителя.\n");
                    if (buffInv.GeneMutation())
                    {
                        Console.WriteLine("Мутировали родителя:\n" + buffInv.ToString());
                        ScheduleObject schOne = new ScheduleObject(lGenIndividual[iter], sizeRange, countPC);
                        ScheduleObject schTwo = new ScheduleObject(buffInv, sizeRange, countPC);

                        Console.WriteLine("Расписание на основе мутированного родителя:\n" + schTwo.ToString());
                        var item = schOne.MinSchedule(schTwo);
                        Console.WriteLine("В популяцию попадает данная особь:\n" + item.GetIndividual().ToString());
                        lIndividual.Add(item.GetIndividual());
                    }
                    else
                    {
                        Console.WriteLine("Мутации родителя не произошло.\n");
                        lIndividual.Add(lGenIndividual[iter]);
                    }
                }
            }
        }