Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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());
        }