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()); }