Пример #1
0
    public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
      var result = new PWREncoding();
      var p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
      var p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
      var child = new List<int>();

      var lookUpTable = new bool[parent1.PermutationWithRepetition.Length];
      for (int i = 0; i < lookUpTable.Length; i++) {
        lookUpTable[i] = random.Next(2) == 1;
      }

      foreach (bool b in lookUpTable) {
        if (b) {
          child.Add(p1[0]);
          p2.Remove(p1[0]);
          p1.RemoveAt(0);
        } else {
          child.Add(p2[0]);
          p1.Remove(p2[0]);
          p2.RemoveAt(0);
        }
      }

      result.PermutationWithRepetition = new IntegerVector(child.ToArray());

      return result;
    }
Пример #2
0
    public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2) {
      var result = new PWREncoding();

      var p1 = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
      var p2 = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
      var child = new List<int>();

      int[] lookUpArrayP1 = GetLookUpForIndividual(p1);
      int[] lookUpArrayP2 = GetLookUpForIndividual(p2);

      int xStringLength = p1.Count / 2;
      int xStringPosition = random.Next(p1.Count / 2);

      //insert elements from parent1 that dont conflict with the "selected" elements form parent2
      for (int i = 0; i < p1.Count; i++) {
        bool isSelected = false;
        for (int j = xStringPosition; j < xStringPosition + xStringLength; j++) {
          if (p1[i] == p2[j] && lookUpArrayP1[i] == lookUpArrayP2[j])
            isSelected = true;
        }
        if (!isSelected)
          child.Add(p1[i]);
      }

      for (int i = xStringPosition; i < xStringPosition + xStringLength; i++) {
        child.Insert(i, p2[i]);
      }

      result.PermutationWithRepetition = new IntegerVector(child.ToArray());
      return result;
    }
Пример #3
0
        public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2)
        {
            var result = new PWREncoding();
            var p1     = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
            var p2     = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
            var child  = new List <int>();

            var lookUpTable = new bool[parent1.PermutationWithRepetition.Length];

            for (int i = 0; i < lookUpTable.Length; i++)
            {
                lookUpTable[i] = random.Next(2) == 1;
            }

            foreach (bool b in lookUpTable)
            {
                if (b)
                {
                    child.Add(p1[0]);
                    p2.Remove(p1[0]);
                    p1.RemoveAt(0);
                }
                else
                {
                    child.Add(p2[0]);
                    p1.Remove(p2[0]);
                    p2.RemoveAt(0);
                }
            }

            result.PermutationWithRepetition = new IntegerVector(child.ToArray());

            return(result);
        }
 public void ApplyTest() {
   IRandom random = new TestRandom(new int[] { 1, 1, 0, 0, 1, 1, 0, 0, 1 }, null);
   PWREncoding parent1 = TestUtils.CreateTestPWR1();
   PWREncoding parent2 = TestUtils.CreateTestPWR2();
   PWREncoding expected = new PWREncoding();
   expected.PermutationWithRepetition = new IntegerVector(new int[] { 1, 0, 1, 0, 1, 2, 0, 2, 2 });
   PWREncoding actual;
   actual = PWRPPXCrossover.Apply(random, parent1, parent2);
   Assert.IsTrue(TestUtils.PRWEncodingEquals(expected, actual));
 }
 public static Schedule Apply(int jobs, int resources, PWREncoding pwr, ItemList<Job> jobData) {
   var resultingSchedule = new Schedule(jobData[0].Tasks.Count);
   foreach (int jobNr in pwr.PermutationWithRepetition) {
     int i = 0;
     while (jobData[jobNr].Tasks[i].IsScheduled) i++;
     Task currentTask = jobData[jobNr].Tasks[i];
     double startTime = GTAlgorithmUtils.ComputeEarliestStartTime(currentTask, resultingSchedule);
     currentTask.IsScheduled = true;
     resultingSchedule.ScheduleTask(currentTask.ResourceNr, startTime, currentTask.Duration, currentTask.JobNr);
   }
   return resultingSchedule;
 }
 public static void Apply(IRandom random, PWREncoding individual) {
   int cutIndex = random.Next(individual.PermutationWithRepetition.Length);
   int insertIndex = random.Next(individual.PermutationWithRepetition.Length);
   List<int> perm = ((IntegerVector)(individual.PermutationWithRepetition.Clone())).ToList<int>();
   int aux = perm[cutIndex];
   if (cutIndex > insertIndex) {
     perm.RemoveAt(cutIndex);
     perm.Insert(insertIndex, aux);
   } else {
     perm.Insert(insertIndex, aux);
     perm.RemoveAt(cutIndex);
   }
   individual.PermutationWithRepetition = new IntegerVector(perm.ToArray());
 }
        public static void Apply(IRandom random, PWREncoding individual)
        {
            int        cutIndex    = random.Next(individual.PermutationWithRepetition.Length);
            int        insertIndex = random.Next(individual.PermutationWithRepetition.Length);
            List <int> perm        = ((IntegerVector)(individual.PermutationWithRepetition.Clone())).ToList <int>();
            int        aux         = perm[cutIndex];

            if (cutIndex > insertIndex)
            {
                perm.RemoveAt(cutIndex);
                perm.Insert(insertIndex, aux);
            }
            else
            {
                perm.Insert(insertIndex, aux);
                perm.RemoveAt(cutIndex);
            }
            individual.PermutationWithRepetition = new IntegerVector(perm.ToArray());
        }
Пример #8
0
        public static PWREncoding Apply(IRandom random, PWREncoding parent1, PWREncoding parent2)
        {
            var result = new PWREncoding();

            var p1    = ((IntegerVector)(parent1.PermutationWithRepetition.Clone())).ToList();
            var p2    = ((IntegerVector)(parent2.PermutationWithRepetition.Clone())).ToList();
            var child = new List <int>();

            int[] lookUpArrayP1 = GetLookUpForIndividual(p1);
            int[] lookUpArrayP2 = GetLookUpForIndividual(p2);

            int xStringLength   = p1.Count / 2;
            int xStringPosition = random.Next(p1.Count / 2);

            //insert elements from parent1 that dont conflict with the "selected" elements form parent2
            for (int i = 0; i < p1.Count; i++)
            {
                bool isSelected = false;
                for (int j = xStringPosition; j < xStringPosition + xStringLength; j++)
                {
                    if (p1[i] == p2[j] && lookUpArrayP1[i] == lookUpArrayP2[j])
                    {
                        isSelected = true;
                    }
                }
                if (!isSelected)
                {
                    child.Add(p1[i]);
                }
            }

            for (int i = xStringPosition; i < xStringPosition + xStringLength; i++)
            {
                child.Insert(i, p2[i]);
            }

            result.PermutationWithRepetition = new IntegerVector(child.ToArray());
            return(result);
        }
Пример #9
0
 public static PWREncoding CreateTestPWR2() {
   PWREncoding result = new PWREncoding();
   IntegerVector pwr = new IntegerVector(new int[] { 0, 1, 1, 0, 2, 0, 1, 2, 2 });
   result.PermutationWithRepetition = pwr;
   return result;
 }
Пример #10
0
 public abstract PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2);
 protected override void Manipulate(IRandom random, PWREncoding individual) {
   Apply(random, individual);
 }
Пример #12
0
 public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2)
 {
     return(Apply(random, parent1, parent2));
 }
Пример #13
0
 protected abstract void Manipulate(IRandom random, PWREncoding individual);
Пример #14
0
 protected PWREncoding(PWREncoding original, Cloner cloner)
     : base(original, cloner)
 {
     this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition);
 }
Пример #15
0
 public static bool PRWEncodingEquals(PWREncoding expected, PWREncoding actual) {
   if (expected.PermutationWithRepetition.Length != actual.PermutationWithRepetition.Length)
     return false;
   for (int i = 0; i < expected.PermutationWithRepetition.Length; i++) {
     if (expected.PermutationWithRepetition[i] != actual.PermutationWithRepetition[i])
       return false;
   }
   return true;
 }
Пример #16
0
 public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) {
   return Apply(random, parent1, parent2);
 }
Пример #17
0
 public abstract PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2);
Пример #18
0
 protected abstract void Manipulate(IRandom random, PWREncoding individual);
 protected override void Manipulate(IRandom random, PWREncoding individual)
 {
     Apply(random, individual);
 }
Пример #20
0
 protected PWREncoding(PWREncoding original, Cloner cloner)
   : base(original, cloner) {
   this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition);
 }