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 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; }
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()); }
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); }
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; }
public abstract PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2);
protected override void Manipulate(IRandom random, PWREncoding individual) { Apply(random, individual); }
public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) { return(Apply(random, parent1, parent2)); }
protected abstract void Manipulate(IRandom random, PWREncoding individual);
protected PWREncoding(PWREncoding original, Cloner cloner) : base(original, cloner) { this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition); }
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; }
public override PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2) { return Apply(random, parent1, parent2); }
public abstract PWREncoding Cross(IRandom random, PWREncoding parent1, PWREncoding parent2);
protected abstract void Manipulate(IRandom random, PWREncoding individual);
protected override void Manipulate(IRandom random, PWREncoding individual) { Apply(random, individual); }
protected PWREncoding(PWREncoding original, Cloner cloner) : base(original, cloner) { this.PermutationWithRepetition = cloner.Clone(original.PermutationWithRepetition); }