public override double CalculateSolutionSimilarity(IScope leftSolution, IScope rightSolution) { var sol1 = leftSolution.Variables[SolutionVariableName].Value as IVRPEncoding; var sol2 = rightSolution.Variables[SolutionVariableName].Value as IVRPEncoding; var potvinSol1 = sol1 is PotvinEncoding ? sol1 as PotvinEncoding : PotvinEncoding.ConvertFrom(sol1, ProblemInstance); var potvinSol2 = sol2 is PotvinEncoding ? sol2 as PotvinEncoding : PotvinEncoding.ConvertFrom(sol2, ProblemInstance); return(CalculateSimilarity(potvinSol1, potvinSol2)); }
protected override ItemArray <IItem> Relink(ItemArray <IItem> parents, PercentValue n) { if (parents.Length != 2) { throw new ArgumentException("The number of parents is not equal to 2."); } if (!(parents[0] is PotvinEncoding)) { parents[0] = PotvinEncoding.ConvertFrom(parents[0] as IVRPEncoding, ProblemInstanceParameter.ActualValue); } if (!(parents[1] is PotvinEncoding)) { parents[1] = PotvinEncoding.ConvertFrom(parents[1] as IVRPEncoding, ProblemInstanceParameter.ActualValue); } return(Apply(parents[0] as PotvinEncoding, parents[1] as PotvinEncoding, n, SampleSizeParameter.Value.Value, IterationsParameter.Value.Value, RandomParameter.ActualValue, ProblemInstanceParameter.ActualValue)); }
public override IOperation InstrumentedApply() { var solution = SolutionParameter.ActualValue as IVRPEncoding; var potvinSolution = solution is PotvinEncoding ? solution as PotvinEncoding : PotvinEncoding.ConvertFrom(solution, ProblemInstance); if (solution == null) { throw new ArgumentException("Cannot improve solution because it has the wrong type."); } int evaluatedSolutions = Improve(potvinSolution); SolutionParameter.ActualValue = solution; LocalEvaluatedSolutions.ActualValue = new IntValue(evaluatedSolutions); return(base.InstrumentedApply()); }