Changeset 5598 for branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Evaluators/QAPEvaluator.cs
- Timestamp:
- 03/02/11 22:33:30 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/QAP/HeuristicLab.Problems.QuadraticAssignment/3.3/Evaluators/QAPEvaluator.cs
r5562 r5598 20 20 #endregion 21 21 22 using System;23 22 using HeuristicLab.Common; 24 23 using HeuristicLab.Core; … … 35 34 public ILookupParameter<Permutation> PermutationParameter { 36 35 get { return (ILookupParameter<Permutation>)Parameters["Permutation"]; } 37 }38 public ILookupParameter<BoolValue> UseDistanceMatrixParameter {39 get { return (ILookupParameter<BoolValue>)Parameters["UseDistanceMatrix"]; }40 36 } 41 37 public ILookupParameter<DoubleMatrix> DistanceMatrixParameter { … … 57 53 public QAPEvaluator() { 58 54 Parameters.Add(new LookupParameter<Permutation>("Permutation", "The permutation that represents the current solution.")); 59 Parameters.Add(new ValueLookupParameter<BoolValue>("UseDistanceMatrix", "True if the distance matrix should be used, false if the distances should be caluclated by taking the euclidean distance between the coordinates."));60 55 Parameters.Add(new LookupParameter<DoubleMatrix>("DistanceMatrix", "The distance matrix that contains the distances between the locations.")); 61 56 Parameters.Add(new LookupParameter<DoubleMatrix>("Coordinates", "The coordinates in case the distance matrix should not be used.")); … … 68 63 } 69 64 70 public static double Apply(Permutation assignment, DoubleMatrix weights, Func<int, int, double> distance) {65 public static double Apply(Permutation assignment, DoubleMatrix weights, DoubleMatrix distances) { 71 66 double quality = 0; 72 67 for (int i = 0; i < assignment.Length; i++) { 73 68 for (int j = 0; j < assignment.Length; j++) { 74 quality += weights[i, j] * distance (assignment[i], assignment[j]);69 quality += weights[i, j] * distances[assignment[i], assignment[j]]; 75 70 } 76 71 } … … 80 75 public override IOperation Apply() { 81 76 Permutation assignment = PermutationParameter.ActualValue; 82 bool useDistanceMatrix = UseDistanceMatrixParameter.ActualValue.Value;83 77 DoubleMatrix weights = WeightsParameter.ActualValue; 84 double quality;78 DoubleMatrix distanceMatrix = DistanceMatrixParameter.ActualValue; 85 79 86 if (useDistanceMatrix) { 87 DoubleMatrix distanceMatrix = DistanceMatrixParameter.ActualValue; 88 quality = Apply(assignment, weights, (x, y) => distanceMatrix[x, y]); 89 } else { 90 DoubleMatrix coordinates = CoordinatesParameter.ActualValue; 91 quality = Apply(assignment, weights, (x, y) => Distance(coordinates, x, y)); 92 } 93 80 double quality = Apply(assignment, weights, distanceMatrix); 94 81 QualityParameter.ActualValue = new DoubleValue(quality); 95 82 96 83 return base.Apply(); 97 84 } 98 99 private double Distance(DoubleMatrix coordinates, int row1, int row2) {100 double dx = coordinates[row1, 0] - coordinates[row2, 0];101 double dy = coordinates[row1, 1] - coordinates[row2, 1];102 return Math.Sqrt(dx * dx + dy * dy);103 }104 85 } 105 86 }
Note: See TracChangeset
for help on using the changeset viewer.