public override IOperation Apply()
        {
            var    permutation = PermutationParameter.ActualValue;
            double relativeQualityDifference = 0;
            var    distanceMatrix            = DistanceMatrixParameter.ActualValue;

            if (distanceMatrix == null)
            {
                throw new InvalidOperationException("The distance matrix is not given.");
            }
            var move = TranslocationMoveParameter.ActualValue;

            relativeQualityDifference = TSPTranslocationMovePathEvaluator.EvaluateByDistanceMatrix(permutation, move, distanceMatrix);

            var moveQuality = MoveQualityParameter.ActualValue;

            if (moveQuality == null)
            {
                MoveQualityParameter.ActualValue = new DoubleValue(QualityParameter.ActualValue.Value + relativeQualityDifference);
            }
            else
            {
                moveQuality.Value = QualityParameter.ActualValue.Value + relativeQualityDifference;
            }
            return(base.Apply());
        }