protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) { if (parent1.Length != parent2.Length) { return(parent1.Clone() as PrinsEncoding); } //note - the inner crossover is called here and the result is converted to a prins representation //some refactoring should be done here in the future - the crossover operation should be called directly InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName; IAtomicOperation op = this.ExecutionContext.CreateOperation( InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope); op.Operator.Execute((IExecutionContext)op, CancellationToken); string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName; if (ExecutionContext.Scope.Variables.ContainsKey(childName)) { Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation; ExecutionContext.Scope.Variables.Remove(childName); return(new PrinsEncoding(permutation, ProblemInstance)); } else { return(null); } }
protected override PrinsEncoding Crossover(IRandom random, PrinsEncoding parent1, PrinsEncoding parent2) { if (parent1.Length != parent2.Length) return parent1.Clone() as PrinsEncoding; //note - the inner crossover is called here and the result is converted to a prins representation //some refactoring should be done here in the future - the crossover operation should be called directly InnerCrossoverParameter.ActualValue.ParentsParameter.ActualName = ParentsParameter.ActualName; IAtomicOperation op = this.ExecutionContext.CreateOperation( InnerCrossoverParameter.ActualValue, this.ExecutionContext.Scope); op.Operator.Execute((IExecutionContext)op, CancellationToken); string childName = InnerCrossoverParameter.ActualValue.ChildParameter.ActualName; if (ExecutionContext.Scope.Variables.ContainsKey(childName)) { Permutation permutation = ExecutionContext.Scope.Variables[childName].Value as Permutation; ExecutionContext.Scope.Variables.Remove(childName); return new PrinsEncoding(permutation, ProblemInstance); } else return null; }
protected PrinsEncoding Manipulate(PrinsEncoding individual, double originalQuality, int u, int v) { PrinsEncoding child = null; bool improvement = false; if (u != v) { child = individual.Clone() as PrinsEncoding; M1(individual, child, u, v); improvement = GetQuality(child) < originalQuality; if (!improvement) { child = individual.Clone() as PrinsEncoding; M2(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M3(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M4(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M5(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M6(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M7(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M8(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M9(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } } if (improvement) { return(child); } else { return(null); } }
protected PrinsEncoding Manipulate(PrinsEncoding individual, double originalQuality, int u, int v) { PrinsEncoding child = null; bool improvement = false; if (u != v) { child = individual.Clone() as PrinsEncoding; M1(individual, child, u, v); improvement = GetQuality(child) < originalQuality; if (!improvement) { child = individual.Clone() as PrinsEncoding; M2(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M3(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M4(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M5(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M6(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M7(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M8(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } if (!improvement) { child = individual.Clone() as PrinsEncoding; M9(individual, child, u, v); improvement = GetQuality(child) < originalQuality; } } if (improvement) return child; else return null; }